Python3 逻辑左移

Python3 logical left shift

默认情况下,Python ( << ) 中的 'left shift' 操作充当算术移位,并将 0 位附加到表示 int 的位的末尾。

例如: 100 << 1 return秒 200

在二进制表示中,我们可以看到 100 = 0b1100100(7 位)和 100 << 1 = 0b11001000(8 位)

在 Python 3 中,执行逻辑左移的最佳方法是什么,其中位数保持不变,但值向左移动?

例如: 100 << 1 会 return 72

在二进制表示中 100 = 0b1100100 和 100 << 1 = 0b1001000 我们保留了相同的 7 位,但只是向左移动了一位并在末尾附加了一个 0。

您可以使用 int.bitlength 来获取表示数字所需的位数,然后 and 移位的结果与 (1 << bitlength) - 1 将结果限制为那么多位数:

def lls_const_bits(n):
    return (n << 1) & ((1 << n.bit_length()) - 1)

print(lls_const_bits(100))

输出:

72

如果要将输出限制为固定位数 b,则需要使用 (1 << b) - 1:

进行屏蔽
def lls_const_bits(n, b):
    return (n << 1) & ((1 << b) - 1)

print(lls_const_bits(100, 7))

输出:

72