【问题标题】:Python3 logical left shiftPython3逻辑左移
【发布时间】:2020-07-22 22:27:35
【问题描述】:

默认情况下,Python 中的“左移”操作 (

例如: 100

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

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

例如: 100

在二进制表示中 100 = 0b1100100 和 100

【问题讨论】:

  • 你可以使用模运算符:(100 << 1) % 2**7 给出 72
  • 您必须在移位后使用& 操作限制所需的位,例如。 G。 & 2**7 - 1 7 位。
  • 你最后一段的字面解释是int(bin(100)[3:]+'0',2)

标签: python python-3.x logical-operators bit-shift


【解决方案1】:

您可以使用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 &lt;&lt; b) - 1 进行屏蔽:

def lls_const_bits(n, b):
    return (n << 1) & ((1 << b) - 1)

print(lls_const_bits(100, 7))

输出:

72

【讨论】:

    猜你喜欢
    • 2019-12-11
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多