黑马程序员技术交流社区

标题: java中逻辑右移">>>"算术右移">>"的区别? [打印本页]

作者: tfy    时间: 2012-12-16 22:16
标题: java中逻辑右移">>>"算术右移">>"的区别?

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了  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2