>>"算术右移">>"的区别?" type="hidden"/>

java中逻辑右移">>>"算术右移">>"的区别?


1、算数右移 “>>”

考虑符号位,右移1位,若符号位为1,则左边补1;若符号位为0,则左边补0。

2、逻辑右移 “>>>”

不考虑符号位,左边统一补0

例子:

 

 

byte a = ~127; System.out.println(a); a = (byte)(a >>> 2); //强制转成byte型,将对结果进行截断 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了


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM