有没有办法让它检查任何数字的第四位,无论该数字有多少位
a=73
if (a>>3&1==1):
print(True)
else:
print(False)
答案 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]