Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Логический оператор "A не подразумевает B" с использованием операторов AND, OR, XOR

Автор вопроса: LucaОтветов: 3

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

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

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

Можно ли реализовать такой оператор с помощью операторов AND, OR, XOR?

logicoperatorsbitwise-operators

Ответы

Ответ 1 · рейтинг 2 · erikkallen

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

Ответ 2 · рейтинг 1 · Guffa

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

Исключающее или (не B)

A xor B

Анализ:

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

Редактировать

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

Ответ 3 · steabert

Я бы сказал:

A AND (A XOR B)

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы