Является ли 4-й бит числа 1 - PullRequest
0 голосов
/ 06 декабря 2018

Есть ли способ заставить его проверять четвертый бит на любое число, независимо от того, сколько бит имеет число

a=73

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

Ответы [ 2 ]

0 голосов
/ 22 августа 2019

Более просто:

def fourthBit(bin_number):
   i = 0
   while bin_number[i] == 0: i = i+1
   return bin_number[3+i]
0 голосов
/ 06 декабря 2018

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

...