方法定义

public static String toBinaryString(int i)  
  • 功能:将整数转换为二进制(基数2)无符号字符串
  • 参数i - 要转换的整数(包括负数)
  • 返回值:二进制字符串(不包含前导零,除非值为0)

功能说明

  1. 数值范围处理
    • 正数:返回常规二进制表示(如 5 → "101"
    • 负数:返回 32位二进制补码形式(如 -1 → "11111111111111111111111111111111"
    • 零:返回 "0"
  2. 无符号输出:结果不包含 +/- 符号
  3. 无前导零:正数省略高位零(最大长度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"  

使用技巧

  1. 快速验证位运算
    int flags = 0b1010; // 二进制字面量  
    System.out.println(Integer.toBinaryString(flags)); // "1010"  
    
  2. 补零对齐(固定32位显示):
    String bin = Integer.toBinaryString(10);  
    String padded = String.format("%32s", bin).replace(' ', '0');  
    // 结果:00000000000000000000000000001010  
    
  3. 位操作调试
    int a = 5; // 0101  
    int b = 3; // 0011  
    System.out.println("AND: " + Integer.toBinaryString(a & b)); // 0001  
    

常见错误与注意事项

  1. 负数误解

    • 错误认为 toBinaryString(-1) 返回 "-1"
    • 正确:返回32位全1补码
  2. 长度混淆

    // 正数可能少于32位  
    String s1 = Integer.toBinaryString(1);  // "1"(非32位)  
    
    • 解决方案:需要固定位数时手动补零
  3. 八进制/十六进制混淆

    • 二进制专用方法,其他进制需用:
      Integer.toHexString(255); // "ff"  
      Integer.toOctalString(63); // "77"  
      

最佳实践与性能优化

  1. 位掩码可视化

    final int MASK = 0b00011100; // 28  
    System.out.println("Mask: " + Integer.toBinaryString(MASK));  
    // 输出:11100(自动省略前导零)  
    
  2. 高效补零方法(使用位运算):

    String fixed32 = Integer.toBinaryString( (1 << 31) | i )  
                       .substring(1);  
    
  3. 性能关键场景
    | 场景 | 推荐方案 |
    |----------------------|--------------------------------|
    | 单次转换 | 直接使用 toBinaryString() |
    | 循环中高频调用 | 改用位运算(避免字符串操作) |
    | 需要前导零 | 预处理:String.format("%32s") |

  4. 大数组处理优化

    // 原始方法(创建大量临时字符串)  
    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位
主要用途 位运算调试、二进制数据可视化
性能风险 高频调用时字符串创建开销
必要处理 需要固定位数时手动补零