黑马程序员技术交流社区
标题:
负数的右移
[打印本页]
作者:
马上都有
时间:
2014-5-20 17:47
标题:
负数的右移
6>>2 = 1(这个我知道怎么来的)
-6>>2 = -2(这个是怎么来的)。
作者:
海世山盟
时间:
2014-5-20 18:29
移位的时候是在二进制情况下进行的。
6的二进制:0000....0110 -6的二进制就是6的二进制取反加1
6的补码:1111...1001 补码加一 1111...1010
得出-6的二进制1111....1010
在二进制里面最高位表示符号位1表示负数0表示正数
因此6移位后变成了01为1加上前面的符号位(+)就是1
-6移位后变成了10为2 加上前面的符号位(-) 就是-2了
作者:
amao
时间:
2014-5-20 19:31
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。
作者:
Blackay
时间:
2014-5-20 20:41
我画了个图 告诉你,希望你能够彻底明白
1.jpg
(184.33 KB, 下载次数: 66)
下载附件
2014-5-20 20:41 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2