假设我有一个表示十六进制值的字符串,比如"0x4",二进制表示为0100。如果我想测试第n位是否设置为1,以及我从最低有效位开始计数的位置(在本例中只有第三位是1),我如何才能以最优雅的方式做到这一点?
我怀疑我做的方式是否非常优雅或高效。bits = '{0:08b}'.format(int(0x4,16)),然后检查字符串(bits-3)是否为"1“
bits = '{0:08b}'.format(int(0x4, 16))
if str(bits[-3]) == "1":
print "Bit is set to 1"我想要一种简洁的方式,例如使用按位运算符或移位。
发布于 2019-09-13 19:26:14
要测试是否设置了位,只需对该位的位掩码使用逐位&:
>>> bool(12 & 0b0100)
True要在第n个位置设置位掩码,请按n-1位置对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)发布于 2019-09-13 19:16:28
您可以使用bin()函数将整数转换为二进制字符串:
>>> n = int('0x4', 16)
>>> n
4
>>> bin(n)
'0b100'
>>> bin(n)[-3] == '1'
True一种更有效的方法是直接使用位运算符对整数进行操作:
>>> bool(n & 1<<2) # shift "1" 2 bits to the left and use bitwise and
True发布于 2019-09-13 19:19:45
通常你会使用bitwise operators:
if 4 & 1 << n:
print('Bit', n, 'is set')https://stackoverflow.com/questions/57922575
复制相似问题