gpt4 book ai didi

binary - 在二进制补码中左移负数时保证负结果吗?

转载 作者:行者123 更新时间:2023-12-02 08:03:53 25 4
gpt4 key购买 nike

假设为负binary number表示为 two's complement我们如何保证标志被保留?

假设我们用四位表示十进制数 -5:1011,并且想要左移一位以乘以 2:

1011 << 1

此操作返回 0110,即 6,不是我们希望的 -10

(我假设这仅适用于第二位为 0 的负数,即接近某个范围的最小可表示负数的负数)

最佳答案

OP在这里。我找到了问题的答案。

向左移动可能会触发arithmetic overflow

two's complement 可以表示的数字范围系统来自-(2^(n-1))2^(n-1)-1 ,其中n是可用位数,包括符号位 (MSB)。因此,在上面每个数字使用 4 位的示例中,可能值的范围是 -87 ,包含在内。

左移m位会将数字乘以 2^m 。所以,在上面的例子中-5 << 1会产生-10 ,超出了 4 位有符号表示形式的可能数字范围 - 这是溢出。

1111 << 1 == 1110 // -1 * 2 is -2
1110 << 1 == 1100 // -2 * 2 is -4
1101 << 1 == 1010 // -3 * 2 is -6
1100 << 1 == 1000 // -4 * 2 is -8
1011 << 1 == 0110 // overflow
1010 << 1 == 0100 // overflow
1001 << 1 == 0010 // overflow
1000 << 1 == 0000 // overflow

总之,在使用 ASL 乘以 2 的幂时,确保乘积位于可能值的范围内非常重要。

关于binary - 在二进制补码中左移负数时保证负结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26224684/

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