java提供兩種右移運算符,屬於位運算符。位運算符用來對二進制位進行操作。
>> :算術右移運算符,也稱帶符號右移。用最高位填充移位后左側的空位。
>>>:邏輯右移運算符,也稱無符號右移。只對位進行操作,用0填充左側的空位。
表達式為:
r = e1 >> e2;
r = e1 >>> e2;
表示把數e1向右移動e2位。
運算規則:
>> :按二進制形式把所有的數字向右移動對應位數,低位移出(舍棄),高位的空位補符號位,即正數補零,負數補1。
符號位不變。
>>>:按二進制形式把所有的數字向右移動對應位數,低位移出(舍棄),高位的空位補零。對於正數來說和帶符號右移相同,對於負數來說不同。
按上一篇,-1在32位二進制中表示為:
11111111 11111111 11111111 11111111
-1>>1:按位右移,符號位不變,仍舊得到
11111111 11111111 11111111 11111111
11111111 11111111 11111111 11111111
因此值仍為-1
而-1>>>1的結果為 01111111 11111111 11111111 11111111