Ray Wang

Ray Wang

twitter

原码、反码及补码

首先,计算机中所有的数据都是以二进制存储的(非 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
上述结果正是需要的结果,所以计算机中使用补码来进行计算

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。