计算机组成原理:为什么n位定点整数绝对值最大的负数用补码表示是-2^n?
不是应该对1111111111……11111111最大绝对值负数求反+1得到1000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0001嘛!? 展开
补码,其实是一个“代替负数”的正数。
使用了补码之后,在计算机中,就没有负数了。
同时,也就消除了减法运算。
那么,计算机,只许配置一个加法器,就可以走遍天下了。
使用补码的目的,就是“简化硬件”。
-------------------
一个正数(补码),怎么就能“代表负数”呢?
其理论,基于“周期性”的特点。
比如,限定使用 2 位 10 进制数(0~99)进行计数。
其计数周期就是:10^2 = 100。
此时,就有:
25 - 1 = 24
25 + 99 = (一百) 24
你舍弃进位,+99 就和-1 是等效的。
+98,也就能代替-2。
。。。
计算公式:代替负数的正数=负数+周期。
--------------------
在计算机中,一个字节是 8 位 2 进制数。
其计数周期是:2^8 = 256。
那么,-1 就可以用 255 = 1111 1111 (二进制) 代替。
这就是-1 的补码。
。。。
-128 的补码是:128 = 1000 0000。
--------------------
8 位 2 进制数,总共是 256 个组合。
其中有 128 个是负数:-1 ~ -128。
-128 = -2^(8-1),就是绝对值最大的负数。
一般化,就是说:
n 位定点整数的补码,绝对值最大的负数是:-2^(n-1)。
即:
[ X ]补 = X, ( 0 ≤ X < 2^(n-1) )
[ X ]补 = X + 2^n, (-2^(n-1) ≤ X < 0 )
--------------------
唐朔飞版《计算机组成原理》给出的补码定义,是“隔路”的。
他所说的 n,只是数值的位数。
他所说的补码的位数,则是 (n+1)。
与众不同,只是表示特立独行、标新立异而已,不足为道。