原码 补码 反码 之间有什么关系
在计算机内部的1、0,并不是真正的数字,而是“机器码”。
它们是按照“补码”的规则,代表我们所说的数字。
在计算机中,并没有原码和反码,原码和反码,只能写在纸面上。
计算机中的补码,和纸面上的原码反码,没有任何关系。
================
计算机处理“机器码”的位数,是固定的,如8位机、16位机。。。
下面说明“补码”的构成。
数字 0,在八位机中,就是:0000 0000。
+1,就按二进制加上 1,即:0000 0001。
其他,依次递增即可。
最后的是+127,就加到了:0111 1111。
-------------
负数,依次递减,就行了。(注意,只取八位。)
-1,就是 0000 0000-1,按照二进制相减,
保留八位,即为:1111 1111=255(十进制)。
-2,就再减一,得:1111 1110=254。
其他,依次递减即可。
最后的是-128,即:1000 0000=128。
负数的计算公式:256 + 负数。
(其中的 256,是 2 的 8 次方。)
================
利用补码计算: 59-31 = 28。
计算机中,只有加法器,没有减法器。
必须用补码代替负数,用加法运算如下:
59 的补码=0011 1011
-31 的补码=1110 0001
-相加-------------
得: (1) 0001 1100 = 28 的补码
保留八位结果,这就实现了减法运算。
================
借助于补码,计算机,就可以省去减法器。
因为补码的这个特性,所以,在计算机中,只是使用补码存放数据。
而原码反码,在计算机中,都是不存在的。
================
注意:
如果运算结果超出了-128~+127 的范围,结果将是错的。
这种现象称为“溢出”。
再注意一下:进位,并不等于溢出。