位移位与Python中的整数乘法/除法相同吗?

问题描述 投票:0回答:1

我在某处读到,当数字为负数时它们是不同的,但我做了一个快速测试,看起来它们是等效的,至少在Python中是这样?

for i in range(-1000, 1000):
    assert(i >> 1 == i // 2)
    assert(i << 1 == i * 2)
python binary bit bit-shift
1个回答
0
投票

在 Python 中,处理有符号整数并使用右位移位 (>>) 或整数除法 (//) 除以 2 以及左位移位 (<<) or multiplication (*) to multiply by 2, they behave equivalently for most cases, including negative numbers.

您的测试证实了在 -1000 到 1000 范围内的这种等价性:

蟒蛇 复制代码 对于范围内的 i (-1000, 1000): 断言(i >> 1 == i // 2) 断言(我 << 1 == i * 2) This equality holds true because Python uses two's complement representation for signed integers. In two's complement, right shifting a negative number fills the vacated bits with the sign bit (1 for negative numbers), effectively preserving the sign and performing a division by 2. Left shifting a negative number also preserves its sign.

因此,在 Python 中,对于您测试的整数范围,移位和整数乘法/除法对于正数和负数都是等效的。但是,在处理非常大的数字或使用整数表示或算术规则可能不同的其他编程语言时要小心。

© www.soinside.com 2019 - 2024. All rights reserved.