java中逻辑右移">>>"算术右移">>"的区别?
>>右移运算符,有符号。右边超出截掉,左边补上符号位
>>>右移运算符,无符号,左边补0
算术右移 顾名思义 算术嘛 当然要带符号了 所以要补上符号位 负的就填1 正的就填0
那个逻辑右移 直接补上0就ok
例子:
byte a=~127;
System.out.println(a);
a=(byte)(a>>>2);
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了 |
|