我一直在使用Java获得一个奇怪的问题,并且已经在Windows和Mac系统上进行了测试,并且一直出现这个问题。Java位运算符(零填充移位)不填充零
看看这段代码
int a = -32; //11100000 as per two's complement
System.out.println(a >>> 2);
我希望这个代码产生56,这是它的二进制形式00111000。但是,它会以二进制形式生成值1073741816,111111111111111111111111111000。我知道整数是32位的Java,但设置字节的类型也是一样的。
但是如果我声明一个二进制文字这样
int b = 0b11100000;
System.out.println(b);
System.out.println(b >>> 2);
第一语句产生的值224(预期-32),而第二个语句产生的56
预期值我要去疯?
使用'Integer.toBinaryString()'或类似的方法调试可能会更容易 –