Integer.toBinaryString 是 Java 中将 int 转为无符号二进制字符串的标准方法,正数直接转换(如 10→"1010"),负数按补码有效位输出(如 -1→32 个 "1"),不加前缀、不补零,需格式化时可自行拼接或用 String.format 补位。

Integer.toBinaryString 是 Java 中将 int 类型整数转为无符号二进制字符串表示 的标准方法,它不带前导零、不加“0b”前缀,且对负数按补码的**有效位部分**(即去掉高位连续的 1)转换。
基本用法:正数直接转,简洁直观
该方法接收一个 int 参数,返回其二进制形式的字符串(不含符号位,也不补零):
- 例如:
Integer.toBinaryString(10)返回"1010"(因为 10 = 8+2 = 2³+2¹) -
Integer.toBinaryString(0)返回"0" -
Integer.toBinaryString(1)返回"1"
负数怎么处理?只保留“有意义”的二进制位
Java 中 int 是 32 位有符号类型,负数以补码存储。但 toBinaryString 不会输出全部 32 位,而是省略高位连续的 1,只保留从第一个 1 开始的部分:
-
Integer.toBinaryString(-1)→"11111111111111111111111111111111"(32 个 1,因为 -1 的补码全是 1,没有前导零可省) -
Integer.toBinaryString(-2)→"11111111111111111111111111111110"(也是 32 位) -
Integer.toBinaryString(-8)→"11111111111111111111111111111000"
注意:它**不是**取绝对值再加负号,也不是截断成 8 位;它忠实反映该 int 值在内存中的补码形式(但始终以字符串形式输出,不截位)。
立即学习“Java免费学习笔记(深入)”;
如果需要固定位宽或加“0b”前缀怎么办?
toBinaryString 本身不支持格式化,需自行拼接或补零:
- 加前缀:
"0b" + Integer.toBinaryString(10)→"0b1010" - 补足 8 位:
String.format("%8s", Integer.toBinaryString(5)).replace(' ', '0')→"00000101" - 更稳妥的补零方式(避免空格问题):
String.format("%32s", Integer.toBinaryString(x)).replace(' ', '0')可得 32 位完整表示
替代方案:用 String.format 或 BigInteger(按需选择)
若需更强控制力,可考虑:
-
String.format("%s", Integer.toBinaryString(x))—— 和直接调用一样 -
String.format("%32s", Integer.toBinaryString(x)).replace(' ', '0')—— 补齐 32 位 - 对任意大整数:
new BigInteger("123").toString(2)
不推荐用位运算手动拼接——易错且无必要,标准方法已足够可靠。


















