背景:
对于一个数字,计算机需要使用一定的可运算的编码方式对其进行编码。我们这里所讲的原码,反码,补码都是计算机对具体二进制数据的编码方式。
例如对于一个简单的数字6, 我们可以用四个二进制位0110这样的表示。
什么是原码?
计算机中所有的数均用0、1编码表示,数字的正负号也不例外,如果一个机器数字长是n位的话,约定最左边的第一位用作符号位(0表示整数,1表示负数),其余n-1位用于表示数值。比如:(以8位二进制为例)
+1 的原码 = 0000 0001
-1的原码 = 1000 0001
因为第一位是符号位,所以8位二进制数的取值范围就是:(1111 1111)~ (0111 1111),即[-127 ~ 127]。以此类推,用原码表示的n位二进制数的取值范围就是:
-2^(n-1) ~ 2^(n-1)
补码计算时应根据此范围进行判断是否发生溢出。
原码的缺点
原码不能直接参加运算,可能会出错。最明显的就是一个数与它相反数相加不等于0,例如,1+(-1)=0,而在二进制中00000001+10000001=10000010,10000010换算成十进制为-2。显然是不对的,为了解决这个问题,于是反码出现了。
那么什么是反码?