gpt4 book ai didi

assembly - 为什么用MSB作为符号位?

转载 作者:行者123 更新时间:2023-12-02 18:31:54 34 4
gpt4 key购买 nike

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

最佳答案

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

这与以下事实有关:有符号整数与非负值的无符号整数使用相同的位模式,如果将符号位放在其他位置,则情况并非如此。这意味着像 C (unsigned)my_intvar 这样的操作是免费的,而不需要移位或旋转指令,或一些特殊的转换指令。


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

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

关于assembly - 为什么用MSB作为符号位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69311807/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com