Ari*_*ome 2 memory binary assembly twos-complement
我正在阅读Kip Irvine关于x86汇编编程的书,在解释有符号整数时,提到MSB(最高有效位)用作有符号位,0代表+ve,1代表-ve,如果我不是的话错误的。但是,我不明白为什么使用 MSB 来表示符号。如果使用 LSB,恕我直言,更大的数字可以存储在相同的位数中。是否因为LSB,即第一位(第零位的位),对于表示奇数是必需的?
使用 MSB 来表示符号允许使用完全相同的一组硬件(晶体管)执行无符号和有符号加法。
这与以下事实有关:有符号整数与非负值的无符号整数使用相同的位模式,如果将符号位放在其他位置,则情况并非如此。这意味着像 C 这样的操作(unsigned)my_intvar是免费的,而不需要移位或循环指令,或者一些特殊的转换指令。
AFAIK,这是符号位最合乎逻辑且最不令人惊讶的位置。事实上,如果想要一个 16 位有符号数来允许对值 65534 进行编码,则需要放弃奇数。
从数学角度来看,认为每个位具有不同的权重也更有意义:对于无符号 16 位值,为 1,2,4, ..., 16384, 32768,但对于无符号 16 位值,为 1,2,4, ..., 16384 , -32768 对于有符号值。这简化了硬件算法的分析,允许有符号和无符号乘法共享绝大多数逻辑。