科技 · 科普
补码与计算机的数值表示
介绍计算机补码的基本原理,理解计算机系统如何存储和表示有符号数值。

1. 真值与机器数
真值是原来的数,机器数为相应存储在电脑内的二进制数。
2. 模的概念
一个计量系统的计数范围。
生活实例:时钟的模为 12,计量范围是 0~11,11 过后又回到 0。 n 位计算机数的模为 2^(n),计量范围是 0~(2^(n)-1)。
运用:n=4,模为 2^(4)=16,计量范围是 0~15(二进制表示 0000~1111)。如当前数 15 的二进制值为 1111,则再加 1,计数值就变为了 0000,真值就变成了 0,而在最高位上溢出了一个 1。
3. 补码(以 8 位二进制为例)
本质:用大的正数来表示小的负数,化减为加。
生活实例:在时钟内:从 8 点调到 5 点,有 8-3=8+9,则-3=9(绝对值相加等于模)
(1) 原理
8 位二进制数原本计数的范围是 0~255,因需要表示负数使用补码,将 128~255 用来表示负数(-1~-128)其二进制首位为 1,0~127 不变仍表示正数(0~127)其二进制首位为 0。
若最终结果超出范围,可增加位数避免溢出。
例:若想记录数 128,则需要将 8 位二进制数提升至 16 位,扩大计数范围避免溢出。
(2) 补码的二进制表示
如果 n 是正数,补码就是其二进制,如果 n 是负数,补码则是 n+256 的二进制。
「+73」补码 = 01001001 「-73」补码 = 10000000 - 01001001=10110111(183 的二进制)
(3) 补码的运算
① 真值到补码:
- 当 n 是负数,可以通过其相反数各位
取反加1来快速求出补码。
例:设 n=8,求-36 补码。 36 的二进制=00100100 各位取反得 11011011 末位加 1 结果为 11011100 即为补码
② 补码到真值:
- 如果补码最高位是 1(即真值 128 以上,代表负数),将各位取反加一,转换为十进制再加负号。
- 如果补码最高位是 0(即真值 127 以下,代表正数),直接转换为十进制即可。
例:假设 n 的八位补码是 10101010,求 n 真值。 10101010 取反加一=01010110 01010110 的十进制=86 添加负号 n=-86