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