移位操作:
左移<<:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。
右移>>:向右移位,符号后面的数字是移了多少位,移的位用符号位补齐,例如01111111右移一位后变为00111111,而10000000右移一位后变成11000000,因为符号位是1。
(byte)0xa2>>>2 = 2
(byte)0x72>>>2 = 28
(int)0xa2>>>2 =28 (错误)
(byte)0x72 是十进制的114, 114转换成二进制是 1110010,1110010>>>2 (位移两位)是11100,而11100转换成十进制是:28
而(int)0xa2是十进制的162,162转换成二进制是 10100010, 10100010>>>2 是101000 ,实际的值是40,不是28.
0xa2是142, 已经超过了 byte 的存储空间(-128~+127),会溢出,得到了一个未知的数.
>>>是无符号右移,对于正数相当于除以了4(2^2).
这些是位运算,>>> 右移,左边空出的位以0填充
这上面有详细的解释
http://blog.csdn.net/lu7kang/article/details/5049471