[英]Can I set a particular number of bits to keep for Python's logical shift left?
[英]Python3 logical left shift
默認情況下,Python ( << ) 中的“左移”操作充當算術移位,並將 0 位附加到表示 int 的位的末尾。
例如:100 << 1 返回 200
在二進制表示中,我們可以看到 100 = 0b1100100(7 位)和 100 << 1 = 0b11001000(8 位)
在 Python 3 中,執行邏輯左移的最佳方法是什么,其中位數保持不變,但值向左移?
例如: 100 << 1 將返回 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))
Output:
72
如果要將 output 限制為固定位數b
,則需要使用(1 << b) - 1
進行屏蔽:
def lls_const_bits(n, b):
return (n << 1) & ((1 << b) - 1)
print(lls_const_bits(100, 7))
Output:
72
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.