首先,计算机中所有的数据都是以二进制存储的(非 0 即 1),包括正负数的符号也只能用 0 或 1 来表示,所以二进制的最高位如果是 0 表示正数,如果是 1 则表示负数
使用原码计算#
假设有数值 2 和 -2 如下所示:
+2的原码为0000_0010-2的原码为1000_0010
假设要进行 2 + (-2) 计算
0000_0010+1000_0010=1000_0100(十进制的-4)
显然上面的计算结果不是想要的结果
使用反码计算#
为了解决上面问题,引入 反码
反码:
正数的反码和原码相同,负数的反码除符号位不变,其他位取反
+2的反码0000_0010-2的反码1111_1101
再进行 2 + (-2) 计算
0000_0010+1111_1101=1111_1111
上面的计算结果1111_1111是反码,转成原码为1000_0000也就是十进制-0
综上,可以看出使用 反码 出现了 +0 和 -0 的问题
使用补码计算#
在反码的基础上引入 补码
补码:正数的补码等于 原码,负数的补码是在
反码的基础上 加1
+2的补码0000_0010-2的补码1111_1110
再进行 2 + (-2) 计算
0000_0010+1111_1110=0000_0000
上述结果正是需要的结果,所以计算机中使用补码来进行计算