【问题标题】:How to change if the i th bit is 1,replace with (i+1) bit in python?如果第 i 位为 1,如何更改,用 python 中的 (i+1) 位替换?
【发布时间】:2020-12-30 20:55:27
【问题描述】:

例如读取一个数字=23 和一个位位置=2,在检查第 i 个位置后将其替换为第 (i+1) 个位。

n = int(input("Enter a number: "))
p = int(input("Enter a position: "))
print(bin(n))

def setBit(n, p):
   if(p == 1):
     n >> p+1
   return n

print(setBit(n,p))

【问题讨论】:

    标签: python replace position bit-manipulation shift


    【解决方案1】:

    这是一种方法。获取i+1 位。如果是1,则设置i 位,否则清除i 位。

    def setBit(number, bit_index):
        # Mask for p+1 bit
        mask = 1 << (bit_index + 1)
        # Read p+1 bit
        bit = number & mask
        # Mask for p bit
        mask = 1 << bit_index
        if bit:
            # Set bit
            number |= mask
        else:
            # Clear bit
            number &= ~mask
        return number
    
    n = int(input("Enter a number: "))
    p = int(input("Enter a position: "))
    print(bin(n))
    print(setBit(n,p))
    

    【讨论】:

    • 输入一个数字:23输入一个位置:2 0b10111 23这个代码的结果.no response
    • @Mina 我刚刚更新了。请再次检查。
    • 现在可以了。 Tnx 很多
    【解决方案2】:

    如果第 n 位和第 (n+1) 位不同,这与切换第 n 位相同,因此您也可以使用 xor 在不使用 if 的情况下执行此操作:

    def setBit(number, bit_index):
        t = number >> bit_index
        return number ^ (((t ^ (t >> 1)) & 1) << bit_index)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-23
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2015-11-17
      • 2012-01-13
      • 1970-01-01
      相关资源
      最近更新 更多