原码,用最高位代表正负符号,这想法,就太简单了。
因此,就造成了混乱。
天下,只有一个零。但是在原码中,却编了两个码!
按照码长八位,不但多弄了一个-0,还少了一个-128。
这就想要上天哪!
那么,求-0 的补码,就弄出来了:0 000 0000。
负零,不是负数吗? 符号位,不应该是 1 吗?
此外,求-128 的补码,也无处下嘴!
因为,根本就找不到-128 的原码!
由此可知,原码本身,就是胡编乱造的,无法应用。
反码,也是这样的。
所以,计算机,根本就无法原码和反码。
-----------------------
其实,补码,就是补码,与原码反码,毫无关系。
补码,它就是一个“代表负数”的正数。
使用了补码,计算机中,就没有负数了,
随之,计算机中,也就没有了减法运算。
那么,计算机只要配置一个加法器,就可以走遍天下了。
---------------
补码(一个正数)怎么就能代表负数呢?
你看 10 进制: 28 - 1 = 27
28 + 99 = (一百) 27
只要你限制在2 位数,超过 2 位就舍弃!
那么,+99 和-1,就是等效的。
同样,+98 就能代表-2。
。。。
这些正数,就叫做“负数的补数”。
计算公式,你肯定能推出来: 补数 = 负数 + 10^2。
正数,已经就是正数了,必须直接参加运算,不许变化。
-----------------------
在计算机中,把 8 位 2 进制,称为一个字节。
那么有:
-1 的补码,就是:-1 + 2^8 = 255 = 1111 1111 (二进制)。
-2 的补码:-2 + 256 = 254 = 1111 1110。
。。。
-128 的补码:-128 + 256 = 1000 0000。
-----------------------
有了这些,不就完事了吗?
原码反码符号位不变取反加一。。。还弄这些干嘛?
你想想老外的数学水平吧,弄这些个骚操作,不奇怪!
如果从原码反码,开始学习补码,就弄不明白【补码的意义】。
为了保证0编码的唯一性,
+0和-0是相同的,所以:
0000 0000是:0;
1000 0000是:-128;
因此8位取值范围:-128~127。
【提示】"-1"不是:1000 0001;而是:1111 1111。