Java 十进制转二进制

2024年10月24日 | 11 分钟阅读

将十进制数转换为二进制数是计算机科学和编程中的一项基本操作。二进制是一种基数为 2 的数制系统,意味着它只使用两个数字:0 和 1。相比之下,我们日常使用的十进制系统是一种基数为 10 的数制系统,使用 0 到 9 的数字。

理解十进制和二进制系统

在十进制系统中,每个数字的位置代表 10 的幂。例如,在数字 123 中,“3”代表个位,“2”代表十位,“1”代表百位。

同样,在二进制系统中,每个数字的位置代表 2 的幂。例如,在二进制数 101 中,“1”代表个位,“0”代表二的幂,“1”代表四的幂。

转换过程

要将十进制数转换为二进制数,您需要反复将十进制数除以 2 并记录余数。

首先,将十进制数除以 2 并记下余数。然后,继续将商除以 2,依此类推,直到商变为 0。

最后,将余数颠倒顺序写下来,即可得到二进制表示。

1) 使用 StringBuilder 和取模运算

此方法涉及反复将十进制数除以 2 并记录余数。然后,使用余数按相反的顺序构建二进制表示。

步骤:

  1. 初始化 StringBuilder:创建一个 StringBuilder 对象来存储二进制表示。
  2. 取模运算循环:启动一个循环,直到十进制数变为 0。
    • 计算十进制数除以 2 的余数。
    • 将余数添加到 StringBuilder 的前面。
    • 通过整除(除以 2)更新十进制数,得到下一个商。
  3. 处理零十进制的情况:如果输入的十进制数最初为 0,则向 StringBuilder 中追加“0”,以表示二进制数“0”。
  4. 返回二进制表示:将 StringBuilder 转换为 String 并将其作为二进制表示返回。

让我们在 Java 程序中实现上述步骤。

DecimalToBinary.java

输出

Binary representation of 10 is: 1010

2) 使用位运算符

此方法利用位运算符,特别是右移 (>>) 和按位与 (&) 运算符,来提取十进制数二进制表示中的每个位。

步骤:

  1. 初始化 StringBuilder:创建一个 StringBuilder 对象来存储二进制表示。
  2. 按位运算循环:启动一个循环,该循环迭代 32 次,对应于整数中的 32 位。
    • 将十进制数向右移动当前迭代索引 (decimal >> i)。这会将位置 i 处的位移动到最右边的位置。
    • 与 1 (& 1) 执行按位与操作。这会提取移位后的十进制数的最低有效位 (LSB)。
    • 将提取的位添加到 StringBuilder。
  3. 修剪前导零:修剪 StringBuilder 的二进制表示中的任何前导零。
  4. 处理零十进制的情况:如果输入的十进制数最初为 0,则向 StringBuilder 中追加“0”,以表示二进制数“0”。
  5. 返回二进制表示:将 StringBuilder 转换为 String 并将其作为二进制表示返回。

让我们在 Java 程序中实现上述步骤。

DecimalToBinary.java

输出

Binary representation of 10 is: 1010

3) 使用 Integer.toBinaryString() 方法

此方法利用 Java Integer 类提供的 Integer.toBinaryString() 静态方法。此方法将整数转换为其二进制字符串表示。

步骤:

  1. 调用 Integer.toBinaryString():将十进制数作为参数传递给 Integer.toBinaryString() 方法。
  2. 返回二进制表示:该方法将十进制数的二进制表示作为 String 返回。

Integer.toBinaryString() 方法将十进制转换为二进制字符串。toBinaryString() 方法的签名如下:

让我们在 Java 程序中实现上述步骤。

DecimalToBinary.java

输出

Binary representation of 10 is: 1010 

4) 使用 Math.pow() 函数

此方法使用 Math.pow() 计算十进制数二进制表示的每一位。它确定表示十进制数所需的位数,然后迭代每个位位置,根据其位置计算位值。

步骤:

  1. 检查零十进制:如果十进制数为 0,则返回“0”作为其二进制表示。
  2. 计算位数:计算表示十进制数所需的位数。这是通过取十进制数的以 2 为底的对数并加 1 来完成的。它为我们提供了表示十进制数所需的最小位数。
  3. 迭代每个位位置
    • 从最高有效位位置(2 的最高幂)开始迭代到最低有效位位置(2 的最低幂)。
    • 使用 Math.pow(2, i) 计算每个位置的位值,其中 i 是当前的位位置。
  4. 检查位值
    • 在十进制数和计算出的位值之间执行按位与操作。
    • 如果结果为 0,则该位置的位为 0;否则为 1。
    • 将相应的字符(“0”或“1”)添加到二进制表示中。
  5. 构造二进制表示:迭代完所有位位置后,将构建二进制表示。
  6. 返回二进制表示:将构造的二进制表示作为 String 返回。

让我们在 Java 程序中实现上述步骤。

DecimalToBinary.java

输出

Binary representation of 10 is: 1010

5) 使用递归方法

此方法采用递归算法将十进制数转换为其二进制表示。它递归地将十进制数除以 2,并逐位构建二进制表示。

步骤:

基本情况

  • 如果十进制数为 0,则返回“0”作为其二进制表示。
  • 如果十进制数为 1,则返回“1”作为其二进制表示。
  1. 递归调用:对于大于 1 的十进制数,递归调用 decimalToBinary 方法,并将十进制数除以 2 得到的商作为参数。
  2. 连接余数:递归调用后,将通过 % 2 得到的余数连接到从递归调用获得的二进制表示。
  3. 返回二进制表示:将构造的二进制表示作为 String 返回。

让我们在 Java 程序中实现上述步骤。

DecimalToBinary.java

输出

Binary representation of 10 is: 1010

6) 使用堆栈

此方法采用堆栈数据结构来按相反的顺序存储十进制数的二进制数字。它遍历十进制数,使用按位与操作提取每个位,并将位推入堆栈。处理完所有位后,它将它们从堆栈中弹出以构建二进制表示。

步骤:

  1. 基本情况:如果十进制数为 0,则返回“0”作为其二进制表示。
  2. 遍历十进制数
    • 遍历十进制数,直到它变为 0。
    • 使用按位与 1(decimal & 1)操作提取十进制数的每一位。
    • 将位推入堆栈。
  3. 构造二进制表示:处理完所有位后,将它们从堆栈中弹出以构造二进制表示。
  4. 返回二进制表示:将构造的二进制表示作为 String 返回。

让我们在 Java 程序中实现上述步骤。

DecimalToBinary.java

输出

Binary representation of 10 is: 1010

7) 使用自定义逻辑

我们可以使用自定义逻辑在 Java 中将**十进制转换为二进制**。

DecimalToBinaryExample.java

输出

Decimal of 10 is: 
1010
Decimal of 21 is: 
10101
Decimal of 31 is: 
11111

8) 使用数组

DecimalToBinaryUsingArrays.java

输出

Binary representation of 10 is: 10100000000000000000000000000000