从左到右修改 int 中给定位置的一点:

问题描述

我一直试图想出一个函数,如果给定一个 int,它会使用按位运算在给定位置修改一点:

例如:

modify_bit(int,pos)

modify_bit(0b10000,1) 应该返回 0b11000

或者 modify_bit(0b10000,6) 应该返回 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 )))