У меня есть три логических значения. Мне нужно вернуть false
, если все три - true
или все три - false
. Я верну true
в любой другой ситуации. Основываясь на моем исследовании, в некоторых спецификациях это называется исключающим ИЛИ с тремя переменными.
Обновлено: в некоторых спецификациях утверждается, что XOR с тремя переменными включает в себя единственный результат true
, который будет исходить из набора, в котором только один параметр - true
. XOR, о котором я здесь говорю, относится к другой спецификации, где несколько значений могут быть true
, но не все.
Как быстрее всего выполнить эту операцию? a xor b xor c
не работает
Что, если бы параметров было не три, а n?
Вот таблица истинности для моей желаемой операции (xor с тремя параметрами).
A B C -
T T T F
T T F T
T F T T
T F F T
F T T T
F T F T
F F T T
F F F F
@subdeveloper К сожалению, нет. Отредактировал свой вопрос, чтобы объяснить, почему. В этом вопросе он спрашивает I want a statement that evaluates to true IFF only one of the three values is true.
. Это не то же самое, что у меня.
Использовать этот
(A xor B) or (B xor C)
Также работает для входов n
.
(A xor B) or (B xor C) ... or (n xor n+1)
Спасибо. Я пришел к этому ответу с другом всего несколько минут назад. Рад, что это правильно.
Рад, что вы изменили принятый ответ навсегда, ответ Леандро более подробный.
Чтобы создать алгоритм для этого, вам нужно знать, как использовать карту Карно в трех переменных. См. Образец карты Карно здесь
Хорошо. Во-первых, чтобы упростить задачу, замените T на 1 и F на 0 в вашей таблице истинности.
На первый взгляд, это просто возрастающий 3-битный двоичный файл. Так что расположить его по возрастающей - хорошая идея. Взгляните ниже.
A B C F(A,B,C)
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 0
Используя karnaugh-map, вы получите логическое выражение ниже. Для первого выражения мы получаем A'B.
Для второго выражения AB '.
Для третьего выражения ДО НАШЕЙ ЭРЫ.
Для четвертого выражения ДО НАШЕЙ ЭРЫ'.
Чтобы просто понять карту Карно, если все 1-е находятся внутри прямой видимости таблицы переменной, тогда один член выражения будет содержать только эту переменную. Но если 1-е находится за пределами прямой видимости этой переменной, то это дополнение к этой переменной.
F(A,B,C) = A'B + AB'+ B'C + BC'
но с тех пор
A XOR B = AB'+ A'B
B XOR C = BC'+ B'C
тогда наша упрощенная форма будет
F(A,B,C) = A XOR B + B XOR C
для программирования псевдокода это эквивалентно
result = (A XOR B) OR (B XOR C)
//other else
result = (A ^ B) | (B ^ C)
Вау, отличное чтение. Не могли бы вы объяснить, как вы перешли от 3-битного двоичного шага к шагу F(A,B,C) = A'B + AB'+ B'C
?
Извините, я забыл BC '. Это должно быть F (A, B, C) = A'B + AB '+ B'C + BC'
Спасибо. На этом этапе: A XOR B = AB'+ A'B
. +
представляет собой OR
?
@Hatefield да, вы правы. Это похоже на умножение на И и сложение на ИЛИ, но они означают по-разному. Это используется в основном при анализе логических выражений.
Возможный дубликат XOR трех значений