如下爲我的理解,有不對的地方請提出java
Java中,>>、>>>都是在數字的二進制的補碼中進行的spa
正數的補碼爲自己 如
33的二進制表示爲 00000000 00000000 00000000 00100001 補碼爲 00000000 00000000 00000000 00100001.net
負數的補碼爲符號位即最高位1不變(負數符號位爲1,正數爲0),其他各位取反,再加1 如
-33的二進制表示爲 10000000 00000000 00000000 00100001 補碼爲 11111111 11111111 1111111 11011111blog
進行右移>>操做
33>>5 即 補碼 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001
由於33爲正數,再取補碼爲 00000000 00000000 00000000 00000001 轉爲十進制爲1 即33>>5=1ip
-33>>5 即 補碼 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
由於-33爲負數,再取補碼爲 00000100 0000000 0000000 00000010 最前一位1爲符號位 轉爲十進制爲-2 即-33>>5=-2get
進行無符號右移>>>操做
33>>>5 即 補碼 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001
由於無符號位,表明結果確定爲正數,正數取補碼爲自己 00000000 00000000 00000000 00000001 轉爲十進制爲1 即33>>>5=1it
-33>>>5 即 補碼 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
由於無符號位,表明結果確定爲正數,正數取補碼爲自己 00000111 11111111 11111111 11111110 轉爲十進制爲134217726 即-33>>>5=134217726class
以上爲我的理解,若有不對的地方,請各位指正。二進制