方法定义
public static String toBinaryString(int i)
- 功能:将整数转换为二进制(基数2)无符号字符串
- 参数:
i
- 要转换的整数(包括负数) - 返回值:二进制字符串(不包含前导零,除非值为0)
功能说明
- 数值范围处理:
- 正数:返回常规二进制表示(如
5 → "101"
) - 负数:返回 32位二进制补码形式(如
-1 → "11111111111111111111111111111111"
) - 零:返回
"0"
- 正数:返回常规二进制表示(如
- 无符号输出:结果不包含
+/-
符号 - 无前导零:正数省略高位零(最大长度31位),负数固定32位
示例代码
// 正数转换
System.out.println(Integer.toBinaryString(10)); // "1010"
System.out.println(Integer.toBinaryString(255)); // "11111111"
// 负数转换(补码)
System.out.println(Integer.toBinaryString(-1));
// 输出:"11111111111111111111111111111111"
System.out.println(Integer.toBinaryString(-10));
// 输出:"11111111111111111111111111110110"
// 边界值
System.out.println(Integer.toBinaryString(0)); // "0"
System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
// 输出:"1111111111111111111111111111111"(31个1)
System.out.println(Integer.toBinaryString(Integer.MIN_VALUE));
// 输出:"10000000000000000000000000000000"
使用技巧
- 快速验证位运算:
int flags = 0b1010; // 二进制字面量 System.out.println(Integer.toBinaryString(flags)); // "1010"
- 补零对齐(固定32位显示):
String bin = Integer.toBinaryString(10); String padded = String.format("%32s", bin).replace(' ', '0'); // 结果:00000000000000000000000000001010
- 位操作调试:
int a = 5; // 0101 int b = 3; // 0011 System.out.println("AND: " + Integer.toBinaryString(a & b)); // 0001
常见错误与注意事项
负数误解:
- 错误认为
toBinaryString(-1)
返回"-1"
- 正确:返回32位全1补码
- 错误认为
长度混淆:
// 正数可能少于32位 String s1 = Integer.toBinaryString(1); // "1"(非32位)
- 解决方案:需要固定位数时手动补零
八进制/十六进制混淆:
- 二进制专用方法,其他进制需用:
Integer.toHexString(255); // "ff" Integer.toOctalString(63); // "77"
- 二进制专用方法,其他进制需用:
最佳实践与性能优化
位掩码可视化:
final int MASK = 0b00011100; // 28 System.out.println("Mask: " + Integer.toBinaryString(MASK)); // 输出:11100(自动省略前导零)
高效补零方法(使用位运算):
String fixed32 = Integer.toBinaryString( (1 << 31) | i ) .substring(1);
性能关键场景:
| 场景 | 推荐方案 |
|----------------------|--------------------------------|
| 单次转换 | 直接使用toBinaryString()
|
| 循环中高频调用 | 改用位运算(避免字符串操作) |
| 需要前导零 | 预处理:String.format("%32s")
|大数组处理优化:
// 原始方法(创建大量临时字符串) for (int num : numbers) { String bin = Integer.toBinaryString(num); } // 优化方案(重用StringBuilder) StringBuilder sb = new StringBuilder(32); for (int num : numbers) { sb.setLength(0); for (int i = 31; i >= 0; i--) { sb.append((num >> i) & 1); } String bin = sb.toString(); }
总结
关键点 | 说明 |
---|---|
核心功能 | int → 二进制字符串(负数以补码形式输出) |
正数长度 | 1~31位(无前导零) |
负数长度 | 固定32位 |
主要用途 | 位运算调试、二进制数据可视化 |
性能风险 | 高频调用时字符串创建开销 |
必要处理 | 需要固定位数时手动补零 |