我一直在使用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()'或類似的方法調試可能會更容易 –