Операция XOR на три значения - PullRequest
0 голосов
/ 31 августа 2018

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

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

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

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

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

see image 3

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

enter image description here

Чтобы просто понять карту karnaugh, если все 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)
0 голосов
/ 31 августа 2018

Используйте это

(A xor B) или (B xor C)

Работает и для n входов.

(A xor B) или (B xor C) ... или (n xor n + 1)

...