Зачем битовый сдвиг при оценке таблиц истинности как двоичных чисел?

Последний ответ на этот вопрос показывает, что двоичная таблица истинности может быть представлена ​​в виде двоичного числа:

0 0 0  | 1
0 0 1  | 1
0 1 0  | 0
0 1 1  | 0
1 0 0  | 1
1 0 1  | 0 
1 1 0  | 1
1 1 1  | 0

Может быть представлен 01010011.

Записи в таблице также можно оценить с помощью этого числа.

def evaluate(f, x):
    return (f & (1<<x)) != 0

f = int('01010011',2)

>>> evaluate(f,int('100',2))
True
>>> evaluate(f,int('101',2))
False

Мой вопрос касается функции evaluate, предоставленной ответом. Почему мы должны сдвигать биты влево на единицу?


person Josh M.    schedule 16.06.2015    source источник


Ответы (1)


У тебя наоборот. Это двоичное число 1, сдвинутое влево на x позиции.

И это должно иметь смысл. Если вы хотите проверить 4-е место в таблице, представленное f, вы должны проверить это f & 10000!=0.

Вы правы, сдвиг на единицу очень произволен и не имеет смысла.

person farid99    schedule 16.06.2015