首页 > 解决方案 > 为什么使用 MSB 作为符号位?

问题描述

我正在阅读 Kip Irvine 的关于 x86 汇编编程的书,在解释有符号整数时,提到 MSB(最高有效位)用作有符号位,0 表示 +ve,1 表示 -ve,如果我不是错误的。但是,我不明白为什么要使用 MSB 来表示符号。如果改用 LSB,恕我直言,更大的数字可能已存储在相同数量的位中。是因为 LSB,即第一位(第零位的位),是表示奇数所必需的吗?

标签: assemblymemorybinarytwos-complement

解决方案


让 MSB 表示符号允许使用完全相同的硬件(晶体管)集执行无符号和有符号加法。

这与有符号整数对非负值使用与无符号相同的位模式有关,如果将符号位放在其他任何地方,情况就不会如此。这意味着像 C 这样的操作(unsigned)my_intvar是免费的,而不需要移位或循环指令,或一些特殊的转换指令。


AFAIK,这是符号位最合乎逻辑和最不令人惊讶的位置。实际上,如果想要一个 16 位有符号数来允许对值 65534 进行编码,则需要放弃奇数。

从数学角度来看,认为每个位具有不同的权重也更有意义:1,2,4, ..., 16384, 32768 用于无符号 16 位值,但 1,2,4, ..., 16384 , -32768 用于有符号值。这简化了硬件算法的分析,例如允许有符号和无符号乘法共享绝大多数逻辑。


推荐阅读