原码、反码和补码

百脑 百脑 2012-07-04 10:23:41
大大大美女
2012-11-05 13:27:21 大大大美女

初看之下,写的十分合理,但是仔细推敲的话我发现楼主似乎忽略了一个重要的问题:

例如 X = -126,其补码为 1000 0010,计算方法如下:

    1 0000 0000
   - 0111 1110
 -----------
     1000 0010

但是计算机是不能做减法的!
如果不用求反加一的方法,是怎么获得补码的呢?

失手少男
2012-11-27 22:51:40 失手少男

求一个数字的补码,是要《你》来求的。
你,求出补码之后,再输入计算机。
有了你这个人,计算机才能得到补码。

soooldier
2013-02-26 11:28:34 soooldier

请教下:“用于求-128的补码,有个溢出的现象”是什么意思呢?如果按照”求反加1“的公式,-128的补码不是1000 0000吗?

kazaff
2013-11-21 16:57:22 kazaff
初看之下,写的十分合理,但是仔细推敲的话我发现楼主似乎忽略了一个重要的问题: 例如 X = 初看之下,写的十分合理,但是仔细推敲的话我发现楼主似乎忽略了一个重要的问题: 例如 X = -126,其补码为 1000 0010,计算方法如下:     1 0000 0000    - 0111 1110  -----------      1000 0010 但是计算机是不能做减法的! 如果不用求反加一的方法,是怎么获得补码的呢? ... 大大大美女

这个辩论很给力啊~

casess
2014-01-12 12:12:50 casess

我想问一下哈~~~为什么计算机不用减法器呢。。。。

daodaomm
2014-04-02 12:33:01 daodaomm

《 thefuture》 说得的有道理!负值在内存中以补码形式存贮,初衷就是为了把减法运算转化为加法运算来实现,并不是为了补码而补码。而且负值补码的计算肯定是由计算机自动完成的(具体一点应该是在程序编译时完成的),而不是 《失手少男 》所言:由《你》来求的!所以“负数X的补码 = |X|按位求反+1 = X按拉求反(除符号位外)+1”来实现,恰恰反映了计算机自动完成补码计算的具体过程,而你的“负数X的补码 = 模 - |X| ”却仍然还是一个减式,计算机如何实现呢?问题没有根本解决!不过你的讨论倒是告诉大家一个基本事实:
负数X的补码 = |X|按位求反+1
= X按拉求反(除符号位外)+1
= 模 - |X| (强调了补码运算本质上是一种模运算,这就是称其为“补码”的缘由)

yalewoo
2014-10-15 19:49:01 yalewoo

原码和反码并不是为了求补码而设计的,一些早期的计算机就用了原码或者反码表示数字

帷幕
2015-09-01 21:59:30 帷幕

如一楼所言,符号位的定义应该还是有用处的吧?
否则在汇编语言之外的高级语言里,如何将机器中的补码和实际数值相互转化?


whatever
2017-02-23 11:15:17 whatever
初看之下,写的十分合理,但是仔细推敲的话我发现楼主似乎忽略了一个重要的问题: 例如 X = 初看之下,写的十分合理,但是仔细推敲的话我发现楼主似乎忽略了一个重要的问题: 例如 X = -126,其补码为 1000 0010,计算方法如下:     1 0000 0000    - 0111 1110  -----------      1000 0010 但是计算机是不能做减法的! 如果不用求反加一的方法,是怎么获得补码的呢? ... 大大大美女

取反加1就是为了让逻辑门电路能方便的计算,这样就不存在减法了。至于人的计算,或者说对于理解补码的原理,取反加1只会让人糊涂。

astrotycoon
2017-08-03 17:16:39 astrotycoon

理解补码时应该不用理会原码和反码,但是原码和反码应该是有作用的,例如反码被用在IP,TCP,UDP,ICMP等协议头中计算校验和!

张小鸡
2017-08-18 08:43:29 张小鸡
取反加1就是为了让逻辑门电路能方便的计算,这样就不存在减法了。至于人的计算,或者说对于理解 取反加1就是为了让逻辑门电路能方便的计算,这样就不存在减法了。至于人的计算,或者说对于理解补码的原理,取反加1只会让人糊涂。 ... whatever

正解


百脑
百脑 (山东淄博)

盼望接受爱的问候 盼望有人能够把我拯救 快到来 我在等待 把我带到安全地带