使用 Integer.toBinaryString() (最推荐)
这是最简单、最直接的方法,也是 Java 开发中应该首选的方式,Java 的 Integer 类提供了一个静态方法 toBinaryString(),可以直接将一个 int 类型的十进制数转换为其二进制表示的字符串。

特点:
- 代码简洁:一行代码即可完成。
- 性能高:由 JVM 内部高度优化,效率远高于手动循环。
- 无前导零:结果字符串不包含前导零,是标准的二进制表示。
代码示例:
public class DecimalToBinary {
public static void main(String[] args) {
int decimalNumber = 25;
// 使用 Integer.toBinaryString() 进行转换
String binaryString = Integer.toBinaryString(decimalNumber);
System.out.println("十进制数: " + decimalNumber);
System.out.println("二进制字符串: " + binaryString); // 输出: 11001
}
}
如果需要处理负数:
Integer.toBinaryString() 也会正确处理负数,但它输出的是该负数在计算机中存储的补码(Two's Complement)形式。
int negativeNumber = -25;
String negativeBinary = Integer.toBinaryString(negativeNumber);
System.out.println("十进制数: " + negativeNumber);
System.out.println("二进制字符串 (补码): " + negativeBinary); // 输出: 11111111111111111111111111100111
手动实现算法 (除2取余法)
为了理解转换的原理,我们可以手动实现这个算法,最经典的方法是“除2取余法”,步骤如下:

- 用十进制数除以 2,记录下商和余数(余数只能是 0 或 1)。
- 用上一步得到的商继续除以 2,再次记录商和余数。
- 重复这个过程,直到商为 0。
- 将所有得到的余数从下往上(从最后一个余数到第一个余数)排列起来,就是对应的二进制数。
代码示例:
public class DecimalToBinaryManual {
public static void main(String[] args) {
int decimalNumber = 25;
String binaryString = convertToBinary(decimalNumber);
System.out.println("十进制数: " + decimalNumber);
System.out.println("二进制字符串: " + binaryString); // 输出: 11001
}
public static String convertToBinary(int decimal) {
// 处理 0 的特殊情况
if (decimal == 0) {
return "0";
}
StringBuilder binaryBuilder = new StringBuilder();
int num = decimal;
// 处理负数(转换为补码比较复杂,这里先处理正数)
// 为了简化,我们假设输入是正数
if (num < 0) {
// 一个简单的处理方式是取绝对值并标记为负,但这不是标准的补码
// 实际应用中,处理负数补码会更复杂
// 这里我们只演示正数转换
System.err.println("警告:此简单示例未正确处理负数补码。");
num = -num;
}
// 核心算法:除2取余
while (num > 0) {
int remainder = num % 2; // 获取余数
binaryBuilder.append(remainder); // 将余数添加到字符串
num = num / 2; // 更新商
}
// 因为余数是逆序产生的,所以需要反转字符串
return binaryBuilder.reverse().toString();
}
}
使用 Integer.toString() 方法
Integer 类还有一个通用的 toString(int i, int radix) 方法,可以将一个整数转换为指定基数(radix)的字符串,当基数 radix 为 2 时,它就实现了十进制到二进制的转换。
特点:
- 灵活,可以轻松转换为其他进制(如 8 进制、16 进制)。
- 同样高效,推荐使用。
代码示例:

public class DecimalToBinaryToString {
public static void main(String[] args) {
int decimalNumber = 25;
// 使用 Integer.toString(number, radix)
String binaryString = Integer.toString(decimalNumber, 2);
System.out.println("十进制数: " + decimalNumber);
System.out.println("二进制字符串: " + binaryString); // 输出: 11001
}
}
使用 BigInteger 处理超大整数
如果十进制数超出了 int 的范围(-2,147,483,648 到 2,147,483,647),就需要使用 java.math.BigInteger 类,它提供了 toString(int radix) 方法,可以处理任意大小的整数。
代码示例:
import java.math.BigInteger;
public class DecimalToBinaryBigInteger {
public static void main(String[] args) {
// 一个超出 int 范围的大数
String bigDecimalStr = "123456789012345678901234567890";
BigInteger bigDecimal = new BigInteger(bigDecimalStr);
// 使用 BigInteger.toString(radix) 进行转换
String binaryString = bigDecimal.toString(2);
System.out.println("十进制大数: " + bigDecimalStr);
System.out.println("二进制字符串: " + binaryString);
}
}
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
Integer.toBinaryString() |
最简洁、最高效,专为二进制设计 | 仅限 int 类型,直接输出补码(负数) |
首选,所有标准的十进制到二进制转换场景 |
Integer.toString(i, 2) |
简洁、高效,可扩展到其他进制 | 仅限 int 类型,直接输出补码(负数) |
需要在不同进制间转换时使用 |
| 手动实现算法 | 有助于理解底层原理,可自定义格式 | 代码冗长,效率较低,处理负数复杂 | 学习、面试、或需要特殊格式化输出时 |
BigInteger.toString(2) |
可以处理超大整数 | 引入了额外的 BigInteger 类 |
处理超出 int 或 long 范围的超大数字时 |
最终建议
- 在实际项目中:请毫不犹豫地使用
Integer.toBinaryString()或Integer.toString(number, 2),它们是标准、高效且可读性最好的方式。 - 在学习或面试中:必须掌握手动实现“除2取余法”,因为它能证明你理解了转换的数学原理。
