如何更改如果第 i 位为 1,在 python 中替换为 (i+1) 位?

问题描述

例如读取一个数字=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))

解决方法

这是一种方法。获取 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))
,

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

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