从左到右修改 int 中给定位置的位:
Modify a bit at a given position in a int from left to right:
我一直在尝试想出一个函数,如果给定一个 int,它会使用按位运算在给定位置修改位:
例如:
modify_bit(int, pos)
modify_bit(0b10000, 1) 应该 return 0b11000
或modify_bit(0b10000, 6) 应该return 0b100001
我进行了研究,但没有发现任何在位板中从 从左到右 的给定位置稍微修改的函数,而是我发现的所有函数可能是我正在寻找的从 从右到左的位置修改一点。
提前致谢!
这是一件非常不寻常的事情。你确定这是规范?您通常不想扩展这样的位序列。但是,这可以满足您的要求:
def setbit( val, pos ):
bits = len(bin(val))-2
if pos >= bits:
val <<= (pos-bits)
bits = pos + 1
val |= 1 << (bits - pos - 1)
return val
def clrbit( val, pos ):
bits = len(bin(val))-2
if pos >= bits:
val <<= (pos-bits)
bits = pos + 1
else:
val &= ~(1 << (bits - pos - 1))
return val
print( bin(setbit( 0b10000, 1 )))
print( bin(setbit( 0b10000, 6 )))
我一直在尝试想出一个函数,如果给定一个 int,它会使用按位运算在给定位置修改位:
例如:
modify_bit(int, pos)
modify_bit(0b10000, 1) 应该 return 0b11000
或modify_bit(0b10000, 6) 应该return 0b100001
我进行了研究,但没有发现任何在位板中从 从左到右 的给定位置稍微修改的函数,而是我发现的所有函数可能是我正在寻找的从 从右到左的位置修改一点。
提前致谢!
这是一件非常不寻常的事情。你确定这是规范?您通常不想扩展这样的位序列。但是,这可以满足您的要求:
def setbit( val, pos ):
bits = len(bin(val))-2
if pos >= bits:
val <<= (pos-bits)
bits = pos + 1
val |= 1 << (bits - pos - 1)
return val
def clrbit( val, pos ):
bits = len(bin(val))-2
if pos >= bits:
val <<= (pos-bits)
bits = pos + 1
else:
val &= ~(1 << (bits - pos - 1))
return val
print( bin(setbit( 0b10000, 1 )))
print( bin(setbit( 0b10000, 6 )))