假设我有一个表示十六进制值的字符串,例如“ 0x4”,二进制表示为0100。如果我要测试第n位是否设置为1,并且我从最低有效位开始计数(在本例中为只有第三位是1)我该如何以最优雅的方式做到这一点?

我怀疑自己的做法是否非常优雅或高效。
位='{0:08b}'。format(int(0x4,16))
然后检查str(bits [-3])是否为“ 1”

bits = '{0:08b}'.format(int(0x4, 16))
if str(bits[-3]) == "1":
    print "Bit is set to 1"


我想要一种整齐的方法,例如使用按位运算符或移位。

最佳答案

要测试是否设置了某个位,请在该位的位掩码上使用按位&

>>> bool(12 & 0b0100)
True


要在第n个位置设置位掩码,请将1移位n-1个位置:

>>> n = 3
>>> 1 << n-1
4
>>> bin(1 << n-1)
'0b100'


结合使用,您可以直接检查是否设置了特定位:

>>> def bitset(number, n):
...     """Test whether ``number`` has the ``n``'th bit set"""
...     return bool(number & 1 << n - 1)
...
>>> bitset(0x4, 3)


如果您的输入是字符串(而不是从整数生成字符串),请使用int进行转换:

>>> bitset(int('0x4', 16), 3)

关于python - 提取十六进制值中的第n位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57922575/

10-15 22:58