前言
在计算机中,数据通常以二进制形式表示,二进制又可以用原码、反码和补码方式来表示。如果只有正数和加法运算,使用原码即可,反码、补码的出现是为了解决负数和减法所带来的问题。
计算机信息存储的最小单位是byte(8位)。便于理解,接下来用带符号位的四位二进制数举例说明。
一、真值
真值是指在计算机中实际表示的数值,它可以通过原码、反码或补码转化得到。对于无符号整数,真值与原码相同;对于有符号整数,真值可通过补码表示。
二、原码(Sign-Magnitude)
原码定义:最高位表示符号位(0为正数,1为负数),其余位表示数值部分。例如0011表示+3,而1011表示-3
原码表示方式直观易懂,易于正值运算,是人脑最容易理解和计算的表示方式。
CPU中的运算器只有加法运算器,没有减法运算器,减法需要通过加法来实现,减去一个数,相当于加上这个数的相反数。
2 + 3 = 5,即0010 + 0011 = 0101 = 5 ---->正确
1+(-1) = 0,即0001 + 1001 = 1010 = -2 ---->不对!
2+(-2) = 0,即0010 + 0010 = 1100 = -4 ---->不对!
2 + -1 = 1,即0010 + 1001 = 1011 = -3 ---->不对!
如下正负数原码对比
正数各码相同 | 负数原码 |
---|---|
0(0000) | -0(1000) |
1(0001) | -1(1001) |
2(0010) | -2(1010) |
3(0011) | -3(1011) |
4(0100) | -4(1100) |
5(0101) | -5(1101) |
6(0110) | -6 |