Операция XOR над тремя значениями

У меня есть три логических значения. Мне нужно вернуть 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

Возможный дубликат XOR трех значений

subdeveloper 31.08.2018 07:25

@subdeveloper К сожалению, нет. Отредактировал свой вопрос, чтобы объяснить, почему. В этом вопросе он спрашивает I want a statement that evaluates to true IFF only one of the three values is true.. Это не то же самое, что у меня.

Hatefiend 31.08.2018 07:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
2
6 470
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Использовать этот

(A xor B) or (B xor C)

Также работает для входов n.

(A xor B) or (B xor C) ... or (n xor n+1)

Спасибо. Я пришел к этому ответу с другом всего несколько минут назад. Рад, что это правильно.

Hatefiend 31.08.2018 08:13

Рад, что вы изменили принятый ответ навсегда, ответ Леандро более подробный.

subdeveloper 04.09.2018 07:03
Ответ принят как подходящий

Чтобы создать алгоритм для этого, вам нужно знать, как использовать карту Карно в трех переменных. См. Образец карты Карно здесь

Хорошо. Во-первых, чтобы упростить задачу, замените 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.

see image 1

Для второго выражения AB '.

see image 2

Для третьего выражения ДО НАШЕЙ ЭРЫ.

see image 3

Для четвертого выражения ДО НАШЕЙ ЭРЫ'.

Чтобы просто понять карту Карно, если все 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?

Hatefiend 31.08.2018 08:29

Извините, я забыл BC '. Это должно быть F (A, B, C) = A'B + AB '+ B'C + BC'

Leandro Keen Zapa 31.08.2018 08:34

Спасибо. На этом этапе: A XOR B = AB'+ A'B. + представляет собой OR?

Hatefiend 31.08.2018 09:11

@Hatefield да, вы правы. Это похоже на умножение на И и сложение на ИЛИ, но они означают по-разному. Это используется в основном при анализе логических выражений.

Leandro Keen Zapa 31.08.2018 09:43

Другие вопросы по теме