是数字1的第4位

时间:2018-12-06 06:56:35

标签: python bit-manipulation bit

有没有办法让它检查任何数字的第四位,无论该数字有多少位

a=73

if (a>>3&1==1):
    print(True)
else:
    print(False)

2 个答案:

答案 0 :(得分:1)

首先,一个问题:第四位是什么?是第4位还是从0开始计数?还是第3位?

可能您遇到了运算符优先级问题。首先,让我们简化您的代码:

a = 18

print(a>>3&1==1) # equivalent to your original code
print((a >> 3) & 1 == 1) # closer to your intent
print((a >> 3) & 1) # see what happens

但这确实是测试位3(其值为8)的一种方法。 18 = 16 + 2,因此它设置了位4和位1。这就是为什么您得到False

请注意,这些位始终从右到左计数。

我可能会用另一种方式做:

print (a & 0x08)
print (a & (1 << 3))

现在,您有73个问题,即64 + 8 + 1,分别是第6、3和0位。

答案 1 :(得分:0)

更简单:

def fourthBit(bin_number):
   i = 0
   while bin_number[i] == 0: i = i+1
   return bin_number[3+i]