>>右移运算符,有符号。右边超出截掉,左边补上符号位
>>>右移运算符,无符号,左边补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了
http://www.cnblogs.com/hongten/p/hongten_java_yiweiyunsuangfu.html
http://blog.sina.com.cn/s/blog_4550f3ca0101am7v.html
本文详细解释了Java中右移运算符(>>)和无符号右移运算符(>>>)的区别,并通过实例展示了如何使用这两种运算符进行移位操作。文章还分析了一个具体的例子,说明了在不同情况下移位运算的结果。
860

被折叠的 条评论
为什么被折叠?



