Может кто-нибудь упростить это побитовое выражение - PullRequest
0 голосов
/ 22 марта 2020

(a & b) ^ (a | b), как я могу просто это сделать, если вы можете добавить любую ссылку для упрощения обучения, это будет лучше

1 Ответ

2 голосов
/ 22 марта 2020

(a&b)^(a|b) == a^b

Так что все становится довольно просто.

Почему? Давайте рассмотрим только один бит, потому что все биты независимы. Таблица истинности для исходного выражения будет выглядеть следующим образом:

a b a&b a|b  ^
0 0  0   0   0
0 1  0   1   1
1 0  0   1   1
1 1  1   1   0

Это та же таблица истинности, что и у a ^ b.

Другой способ взглянуть на нее, который также в таблице истинности видно, что для XOR мы можем поменять местами левый и правый операнд, как мы sh. И мы можем сделать это для каждого бита независимо. Итак, скажем, мы начинаем с a ^ b, тогда мы могли бы, если бы захотели, расположить операнды таким образом, чтобы как можно больше нулей были заменены на левый операнд, а как можно больше - на правый операнд. Для 00 и 11 это ничего не меняет, но мы меняем 10 на 01. Как мы можем это сделать? Приняв a & b в качестве левого операнда и a | b в качестве правого операнда, а затем он вернется к исходному выражению.

...