1、算數右移 “>>”
考慮符號位,右移1位,若符號位為1,則左邊補1;若符號位為0,則左邊補0。
2、邏輯右移 “>>>”
不考慮符號位,左邊統一補0
例子:
byte a = ~127; System.out.println(a); a = (byte)(a >>> 2); //強制轉成byte型,將對結果進行截斷 System.out.println(a);
結果如下
-128
-32分析:
首先, ~127的二進制數為10000000, (~127是取反運算)
但是JAVA在對不足32位的數(byte,char,short)進行移位運算時, 都會先轉成int(32位),所以此時a為11111111111111111111111110000000
移位之后,(00)111111111111111111111111100000
但是你在此a = (byte)(a >>> 2);
//強制轉成byte型,將對結果進行截斷
此時a為11100000, 就是32了