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

© 马上都有 中级黑马   /  2014-5-20 17:47  /  1335 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

6>>2 = 1(这个我知道怎么来的)
-6>>2 = -2(这个是怎么来的)。

3 个回复

倒序浏览
移位的时候是在二进制情况下进行的。
6的二进制:0000....0110 -6的二进制就是6的二进制取反加1   
6的补码:1111...1001  补码加一 1111...1010
得出-6的二进制1111....1010
在二进制里面最高位表示符号位1表示负数0表示正数
因此6移位后变成了01为1加上前面的符号位(+)就是1
-6移位后变成了10为2 加上前面的符号位(-) 就是-2了
回复 使用道具 举报
1.移位是在二进制下进行。
2.数值是以二进制原码表示,二进制补码存放的。
3.正数的原码,反码,补码相同;负数的补码是原码符号位不变取反后加1.
4.右移后,最高位补什么由原有的数据的最高位值而定:最高位是0,则右移后,用0补空位;最高位是1,
则用1补空位。
下面来具体说明:因java中int数据是32位的,这里为了方便只写16位。
正数的就不说了。
以-6为例:
原码:1000 0000 0000 0110
反码:1111 1111 1111 1001
补码:1111 1111 1111 1010
右移2位后:
--11 1111 1111 1110,因为原数据的最高位是1,所以用1补空格,
则移位后的补码为:
1111 1111 1111 1110
则反码就是补码减1:
1111 1111 1111 1101
那么原码就是反码符号位不变取反:
1000 0000 0000 0010(最高位是符号位,是负数)
这个值就是-2。
回复 使用道具 举报
我画了个图 告诉你,希望你能够彻底明白

1.jpg (184.33 KB, 下载次数: 66)

1.jpg
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马