1.机器数和真值
计算机用二进制存储数据。一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用机器数的最高位存放符号,正数为0,负数为1。
一般计算机的字长为8位,最高位为符号位。十进制数3转化为机器数就是 00000011 ,十进制数-5转化为机器数就是 10000101 。
由于符号位的存在,机器数10000101的真实值是-3,而不是形式值133。因此为了区别形式值和真实值,将规定符号位的机器数的真实数值称为机器数的真值。
2.原码 反码
原码:
原码就是符号位加上真值的绝对值。
例子:3的原码为:00000011
-4的原码为:10000100
反码:
正数的反码是其本身
负数的反码:符号位不变,其余位取反
例子:-4的反码:11111011
3.补码的计算,由来和意义
计算机在执行计算时,只对机器数进行加法运算。不用减法运算的原因是,设计减法运算会使得电路变得繁琐。同时由于符号位的特性,如果设计电路识别符号位,电路的复杂程度更会大幅上升。所以人们想出了一个好方法。如计算1-2时,将其转化为1+(-2)来计算,就同时优化掉了减法操作和对符号位的识别。具体的计算依靠的便是补码。
补码的计算:
正数的补码是其本身。
负数的补码是其反码+1。
例子:-4的补码:11111011+1=11111100
注意:这不是补码的定义,仅是补码的计算方式
补码的意义及由来:
在计算机器数的减法时,直接使用原码是不行的。如5+(-3):00000101+10000011,结果为10001000,显然错误了。于是补码就应运而生。举个钟表的例子吧。
有一个不同的钟表,长这样:
4点往回走5个小时,时间就到了11(-1)点,这个过程可以看作4+(12-5)=11。由于4-5和4+7的值相同,所以我们可以把减法转换为加法。二进制数也是这样。
加法计算中的7是怎么来的呢?7=12-5,12可以简单理解成进位,即最大值+1。
所以 举个三位二进制数的例子。如果要求101-010(5-2),我们可以转换成5+(8-6)即101+110.这里,010就是110的补码
我们可以来计算一下。110取反,即111-110=001,为110的反码。按照补码的计算,反码加一,也即111-110+001,调换顺序,111+001-110.加粗的部分刚好就是模的大小(8)所以这就是补码的来历,即凑出形似8-6的格式来完成减法的计算。这就是补码的由来
补码的真正定义