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

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

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

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

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


person Luca    schedule 21.11.2010    source источник


Ответы (3)


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

person erikkallen    schedule 21.11.2010

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

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

A xor B

Анализ:

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

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

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

person Guffa    schedule 21.11.2010
comment
Это элегантно. Интересно, что отрицание выражения становится (not A) xor B - person Luca; 21.11.2010
comment
просто из любопытства, как это дает, где A равно 1, а B равно 0? - person steabert; 21.11.2010
comment
@steabert Ты прав. Я даже анализировал. Сегодня мой мозг не работает. Я буду здесь, когда мои нейроны будут достаточно связаны. - person Luca; 21.11.2010
comment
Все я здесь. Я проанализировал A и !B (поэтому я заменил ^ на &). - person Luca; 21.11.2010
comment
Это даже близко не соответствует правильной функции, которая должна давать 1, только если A = 1 и B = 0. - person erikkallen; 21.11.2010
comment
@erikkallen: Я совсем не так прочитал вопрос. Обратите внимание на и наоборот в вопросе, который, как я предполагаю, означает, что результат должен быть 1, когда A = 1 и B = 0, а также когда A = 0 и B = 1. Вопрос не имеет никакого смысла, как вы Опишите это. - person Guffa; 21.11.2010
comment
-1 Кроме того, при рассмотрении вицеверка я бы догадался, что все сведется к простому XOR? поэтому я рассудил, что это не было намерением... Ответ A and (not B) кажется самым простым, поскольку вопрос заключался в том, чтобы реализовать A, не подразумевает B. - person steabert; 21.11.2010
comment
@steabert: Да, все сводится к простому XOR. Возможно, это не желаемый ответ, но это ответ на вопрос. - person Guffa; 21.11.2010
comment
@Guffa: проведя здесь некоторое время, я заметил, что ответ на то, что человек намеревался спросить, ценится больше, чем ответ на то, что он на самом деле спросил. Однако в этом случае добавленный мне нужен оператор «A не подразумевает B» был полезен :) - person steabert; 21.11.2010

Я бы сказал:

A AND (A XOR B)

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

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

person steabert    schedule 21.11.2010
comment
Это неправильно. Это не дает результата 1, когда A = 0 и B = 1. Обратите внимание на и наоборот в вопросе. - person Guffa; 21.11.2010
comment
См. мой комментарий ниже, давая также 1, когда A = 0 и B = 1 сводится к простому XOR. В конечном итоге вопрос был сформулирован так: «А не означает Б» со ссылкой на статью в Википедии. Кроме того, ваш ответ также дает 0, когда A = 0 и B = 1: D - person steabert; 21.11.2010