从 32 位二进制字符串到 int Java 的转换

Conversion from 32 bit binary string to int Java

为什么这个代码

public static void main(String[] args){
    //                           |   |   |   |   |   |   |   |    
    int N = (int)Long.parseLong("10110011001100111111001111111100", 2);
    System.out.println(Integer.toBinaryString(N)); 
    N = Integer.parseInt       ("-0110011001100111111001111111100", 2);
    System.out.println(Integer.toBinaryString(N)); 
    N = Integer.parseInt       ("+0110011001100111111001111111100", 2); 
    System.out.println(Integer.toBinaryString(N));
}

输出:

10110011001100111111001111111100
11001100110011000000110000000100
110011001100111111001111111100

Javadocs:"The '-' sign can be specified to indicate negative values"。为什么前两个二进制字符串不同?

这就是二进制补码的工作原理。要取反一个数字,它会反转所有位并将结果加 1。

示例: 否定 11110001 ----------> 00001111