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
默认情况下,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