假设我有一个表示十六进制值的字符串,例如“ 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/