整数(正整数、负整数、零),是以各种代码,存入计算机的。
要知道,天下带闭,只有一个零。
零,既不是正数,也不是负数。 这可是小学的知识。
但是,计算机砖家,硬给零,强加了一个符号位!
于是,在原码反码中,就都为一个零,编造了正负两个代码。
零的原码,有两个:0000 0000、1000 0000。
反码,也是两个:0000 0000、1111 1111。
这些砖家,这就是要“上天”哪!
-------------------
原码和反码,都是重复定义了“零的编码”,这就造成了混乱。
而且,零多占用一组代码,那么,所能表示的数字,必然就少一个。
因此,八位的原码反码,都不能表示-128。
这就导致了:【原码和反码,计算机都无法使用】。
所以,在计算机系统中,数值,一律采用补码来表示和存储。
-------------------
补码的理论,来源于数学的规律,并非是人为的胡编乱造。
0 的八位补码,只有一个,就是:0000 0000。
零,在补码中,只用唯一的一组代码来表示,这就不会产生混乱。
--------------------
求补码,书上介绍的方法,就是:取反加一。
但是,原码反码中,都是没有 0 和-128。
(虽然原码反码都有 +0 和-0,但是它们毕竟不是 0。)
谁再想用“取反加一”,就要 Duang、Duang 的碰壁了。
--------------------
那么,0 和-128 的补码,都是怎么求出来的?
补码,有自己的定义式,与悉拍原码反码,并无关系。
这定义式,是由数学理论推导出来的,要比胡说八道的“取反加一”更准确严密。
当 X >= 0: [ X ]补码 = X;
当 X < 0:蠢陆裂 [ X ]补码 = X + 2^n, n 是补码的位数。
按照定义式,0 和-128 的八位补码,都可以求出来了。
[ 0 ]补码 = 0000 0000。
[-128]补码 = -128 + 2^8 = 128 = 1000 0000 (二进制)。
--------------------
如果按照“取反加一”,零的补码,也将是“负零的反码+1”。
那么,[-0 ]补码,就是:0000 0000!
发现有点诡异呀?
-0,不是负数吗? 其补码的符号位。怎么是(0)正的!
哪位计算机砖家来解释解释。。。