Сначала вопрос: что такое четвертый бит?Это бит 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.