A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tfy 中级黑马   /  2012-12-16 22:16  /  1144 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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了  

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马