一、补码
最常见的有符号数的计算机表示方式就是补码 (Two's complement) 形式。在这个定义中,将字的最高位解释为负权(negative weight)。用函数
最高有效位也成为符号位,他的权重为-2^(w-1),是无符号表示中权重的负数。符号位被置为1时,表示值为负,而当设置为0,值为负数。这里来看一个示例。
B2T([0001]) = -0*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 1
B2T([1011]) = -1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = -5
根据定义式,我们可以看出,补码最小值为[10...0],符号位为1,其他为均为0;最大值刚好相反。
有符号数还有两种标准的表示方法:
二、反码
反码(One's complement)除了最高有效位的权是-(2^(w-1) - 1) 而不是 -2^(w-1) ,它和补码是一样的
三、原码
原码(Sign-Magnitude)最高有效位是符号位权为1,用来确定剩下的位应该取负权还是取正权
注意:
1) 补码来源于这样的一个情况,对于非负数x, 我们用 2^w-x 来计算 -x 的 w 位表示。
比如 B2T([1011]) = -5 = 16-5 = 11 = [1011]
2) 术语反码来源于这样的一个属性,我们用[11...1]-x 来计算 -x 的反码