黑马程序员技术交流社区

标题: 请高人指点下 关于有符号右移的问题? [打印本页]

作者: 蔡陶军    时间: 2013-4-4 12:47
标题: 请高人指点下 关于有符号右移的问题?
本帖最后由 蔡陶军 于 2013-4-4 13:33 编辑

-3>>2  为什么等于-1啊
1000-0000  0000-0000  0000-0000  0000-0011   -3原码
1111-1111  1111-1111  1111-1111  1111-1100   -3反码
1111-1111  1111-1111  1111-1111  1111-1101   -3补码

111111-1111  1111-1111  1111-1111  1111-1101   -3>>2的补码

111111-1111  1111-1111  1111-1111  1111-1100   -3>>2的反码

100000-0000  0000-0000  0000-0000  0000-0011   -3>>2的原码  

我搞出来怎么还是-3啊    :Q  苦逼啊 今天进行复习时候 竟然补知道怎么来的
作者: 打工人    时间: 2013-4-4 13:00
负数的原码是 减一取反
作者: 邵震    时间: 2013-4-4 13:01
没错啊
1111-1111  1111-1111  1111-1111  1111-1100是-3  右移两位
111111-1111  1111-1111  1111-1111  1111-11是-1啊
负数的二进制就是正数的二进制取反在加一   1不就是一堆零加1吗 取反不就是一堆1加一个0吗在加1不就是全是1了吗

作者: 蔡陶军    时间: 2013-4-4 13:08
没有明白中....
作者: 蔡陶军    时间: 2013-4-4 13:12
冯海霞 发表于 2013-4-4 13:00
负数的原码是 减一取反

111111-1111  1111-1111  1111-1111  1111-1101   -3>>2的补码

111111-1111  1111-1111  1111-1111  1111-1100   -3>>2的反码

100000-0000  0000-0000  0000-0000  0000-0011   -3>>2的原码  

这里难道不是如你所说 二进制减一,然后再进行取反吗(最高位补取反)
作者: 蔡陶军    时间: 2013-4-4 13:17
邵震 发表于 2013-4-4 13:01
没错啊
1111-1111  1111-1111  1111-1111  1111-1100是-3  右移两位
111111-1111  1111-1111  1111-1111   ...

负数的二进制就是正数的二进制取反在加一  ?
哥别误导我吧

应该是负数的补码是该负数的绝对值的二进制然后取反加1才对吧
作者: 黑马李超    时间: 2013-4-4 13:20
负数的二进制码是对应正数的二进制码减一取反
作者: 邵震    时间: 2013-4-4 13:23
额 我说的正数就是绝对值的意思

你说的补码 反码什么的是啥意思不知道

不过你问的不就是-3>>2为什么是-1吗

好多年不用数学名词了 都还给老师了
作者: 蔡陶军    时间: 2013-4-4 13:32
我终于明白了  原来是右位移过程中,会舍去移动过去的数
111111-1111  1111-1111  1111-1111  1111-1101   -3>>2的补码
111111-1111  1111-1111  1111-1111  1111-11      这里就舍去了上面最后的01
111111-1111  1111-1111  1111-1111  1111-10
100000-0000  0000-0000  0000-0000  0000-01
作者: _王涛    时间: 2013-4-4 13:41
0000--0000 0000--0000 0000--0000 0000--0011=3
1111--1111 1111--1111 1111--1111 1111--1100  3取反
0000--0000 0000--0000 0000--0000 0000--0001=1 相加
--------------------------------------------------
1111--1111 1111--1111 1111--1111 1111--1101|=-3
>>2
1111--1111 1111--1111 1111--1111 1111--1111=-1
先写出正数3的二进制,最后取反+1得到-3,然后再>>2,就得到了想要的结果-1.

作者: 蔡陶军    时间: 2013-4-4 13:46
_王涛 发表于 2013-4-4 13:41
0000--0000 0000--0000 0000--0000 0000--0011=3
1111--1111 1111--1111 1111--1111 1111--1100  3取反
000 ...

嗯  是这样的 负数右移 最高位用1填补,而移出去的位将舍去也就是01被舍去了




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