Логический оператор «A не подразумевает B» с использованием операторов AND, OR, XOR - PullRequest
0 голосов
/ 21 ноября 2010

У меня есть две битовые маски (скажем, A и B , и я хочу знать, какой бит A равен 1, где соответствующий B бит равен 0 (и наоборот).

Конечно, это реализуемо с помощью условных операторов, но я не хочу повторять / сдвигать для проверки всех битов битовой маски.

Логическое условие, которое мне нужно, не реализовано (или, по крайней мере, я его не вижу). Используя параллель с логическими элементами, мне нужен оператор «A не подразумевает B» (см. Wikipedia ).

Можно ли реализовать такой оператор, используя операторы AND, OR, XOR?

Ответы [ 3 ]

2 голосов
/ 21 ноября 2010

Согласно связанной Википедии, самое простое выражение - A and (not B)

1 голос
/ 21 ноября 2010

Вы можете использовать:

Xor (не B)

A xor B

Анализ:

A  B  A xor B
0  0     0
0  1     1
1  0     1
1  1     0

Edit:

Изменил его на простой XOR, который дает результат, который задает вопрос. Возможно, вопрос сформулирован неправильно, поскольку решение кажется слишком простым ...

0 голосов
/ 21 ноября 2010

Я бы сказал:

A AND (A XOR B)

дает вам 1, где A равно 1, а B равно 0.

Сначала вы обнаруживаете, где A и B отличаются, а затем совпадаете сА равен 1.

...