按位取反问题有一点不太明白的,

little_樺_fish 2011-11-28 01:05:42
我的疑惑在于,按位取反"~"与在求补码时的取反是不是不同的?按位取反时,符号位要变,然后在求补码时的取反符号位不用变化.

例如:~12=-13,这个答案是肯定的了,也知道在计算机中是以补码的形式存放的,

12的二进制是: 01100 第一个0是符号位(计算机中是以补码的形式存放,所以此处也是补码)
按位取反之后: 10011 (此时符号位有变化)
这个数直接转换成十进制的话是得不到-13的.

因为10011还是存放在计算机内存中,所以这个依然是补码
因此要先转成原码再转成十进制
10011先减1,再取反便得到原码:11101 (此时符号位并没变化)

问题就是在符号位上,这里这样理解对不对呢?

按位取反"~"与在求补码时的取反是不同的?????
...全文
562 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
little_樺_fish 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 studycbc 的回复:]

例如:~12=-13,这个答案是肯定的了,也知道在计算机中是以补码的形式存放的,

12的二进制是: 01100 第一个0是符号位(计算机中是以补码的形式存放,所以此处也是补码)
按位取反之后: 10011 (此时符号位有变化)
这个数直接转换成十进制的话是得不到-13的.
--------------------------------------------------------……
[/Quote]

谢谢指出错误.这里和我所理解的那个也一样对吧!"~"按位取反时,符号位变化,求补时的取反符号位不变.
自信男孩 2011-11-28
  • 打赏
  • 举报
回复
求补码是部队符号位做操作的,即忽略符号位,其它位按位取反,然后加1.由补码求源码也是符号位不便其它位按位取反加1.
单独的取反操作是对所有位的操作。这是与求补码中的取反操作有一点区别的。
七擒关羽 2011-11-28
  • 打赏
  • 举报
回复
例如:~12=-13,这个答案是肯定的了,也知道在计算机中是以补码的形式存放的,

12的二进制是: 01100 第一个0是符号位(计算机中是以补码的形式存放,所以此处也是补码)
按位取反之后: 10011 (此时符号位有变化)
这个数直接转换成十进制的话是得不到-13的.
---------------------------------------------------------------------
1、12的二进制是1100不是01100,前面有多个0,按照计算机不同
2、12取反的二进制为11111111 11111111 11111111 11110011 这个是32位机上的表示
3、-13的是13取补码11111111 11111111 11111111 11110011,补码是取反加1
所以2个是相等的

無_1024 2011-11-28
  • 打赏
  • 举报
回复
求补码的时候的按位取反是不包括符号位的 需要吧符号位排除在外

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧