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

如果第i位是1,在python中如何更改为(i+;1)位?,python,replace,position,bit-manipulation,shift,Python,Replace,Position,Bit Manipulation,Shift,例如,在检查第i个位置后,读取数字=23和位位置=2,将其替换为第(i+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 <&

例如,在检查第i个位置后,读取数字=23和位位置=2,将其替换为第(i+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))
def setBit(数字,位索引):
#p+1位的掩码

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

def setBit(number, bit_index):
    t = number >> bit_index
    return number ^ (((t ^ (t >> 1)) & 1) << bit_index)
def setBit(数字,位索引):
t=编号>>位索引

返回编号^((t^(t>>1))&1)输入编号:23输入位置:2 0b10111 23此代码的结果。否response@Mina我刚刚做了一个更新。请再次检查。现在一切正常。Tnx很多
def setBit(number, bit_index):
    t = number >> bit_index
    return number ^ (((t ^ (t >> 1)) & 1) << bit_index)