Побитовые ворота NOR - что значит &?
Я пытаюсь понять код из ответа, который я получил вчера:
2-й: Как сделать битовые NOR ворота
1-й: Как сделать побитовый NOR Gate в Python (редактирование математики Python для меня работать)
a=0b01100001
b=0b01100010
bin((a ^ 0b11111111) & (b ^ 0b11111111))
Теперь я понимаю все, кроме:
&
между двумя значениями
и ^ 11111111
(Я знаю это 0b
является базой 2
)
Может кто-нибудь объяснить это?
1 ответ
Как NOR
работает?
Выражение x NOR y
может быть сломан с помощью AND
, OR
, а также NOT
:
x NOR y == NOT(x OR y) == NOT(x) AND NOT(y)
Итак, для ваших заданных значений:
a=0b01100001
b=0b01100010
a NOR b
было бы NOT(a) AND NOT(b)
, Теперь подумайте, как бы вы сделали NOT(a)
? Вам просто нужно перевернуть биты. Какой способ перевернуть биты? XOR(^)
, Как?
0 ^ 1 == 1
1 ^ 1 == 0
Итак, принимая XOR
любой бит с 1
перевернет этот бит. т.е. NOT(somebit) == a XOR somebit
, Итак, в вашем случае, просто возьмите XOR
каждого бита в a
а также b
с 1
достанет тебе NOT
:
01100001
^ 11111111
------------
10011110
То есть мы делаем XOR
с 11111111
, Обратите внимание на количество 1's
такое же, как количество бит в a
,
Собираем это вместе:
NOT(a) = a ^ 0b11111111
NOT(b) = b ^ 0b11111111
Теперь, когда мы получили NOT
с a
а также b
давайте сделаем AND
, Итак, как сделать AND
? Просто сделай побитовый &
,
Это довольно просто:
NOT(a) AND NOT(b) == (a ^ 0b11111111) & (b ^ 0b11111111)