我正在读基普·欧文的关于x86汇编语言编程的书,在有符号整数的解释中,提到MSB (最高有效位)被用作有符号位,如果我没有记错的话,0代表+ve,1代表-ve。不过,我不明白为甚麽要用MSB来表示标志。如果使用LSB,IMHO,可以在相同的位数中存储更大的数字。是不是因为LSB,也就是表示奇数所需的第一位(第零位)?
发布于 2021-09-24 09:00:57
使用MSB表示符号允许使用完全相同的一组硬件(晶体管)执行无符号和有符号加法。
这与有符号整数对非负值使用与无符号整数相同的位模式有关,如果您将符号位放在其他任何位置,情况就不会是这样。这意味着像C (unsigned)my_intvar
这样的操作是免费的,而不需要移位或旋转指令,或者一些特殊的转换指令。
AFAIK,这是符号位最符合逻辑和最不令人惊讶的位置。实际上,如果想要16位有符号数字来允许对值65534进行编码,则需要放弃奇数。
从数学角度来看,认为每个位具有不同的权重也更有意义:无符号16位值为1,2,4,...,16384,32768,但有符号值为1,2,4,...,16384,-32768。这简化了硬件算法的分析,例如允许有符号和无符号乘法共享绝大多数逻辑。
https://stackoverflow.com/questions/69311807
复制相似问题