Додавання за модулем 2

Додавання за модулем 2 (виключає «або», XOR, сувора диз'юнкція, порозрядне доповнення, інвертування по масці, жегалкінское складання, логічне віднімання, логічна нерівнозначність) - булева функція , а також логічна і бітова операція , В разі двох змінних результат виконання операції правдивий тоді і тільки тоді, коли один з аргументів правдивий, а другий - хибна. Для функції трьох (тернарного складання по модулю 2) і більш змінних - результат виконання операції буде істинним тільки тоді, коли кількість аргументів, рівних 1, складових поточний набір, - непарне. Така операція природним чином виникає в кільці відрахувань по модулю 2 , Звідки і походить назва операції.

Додавання за модулем 2 називається «виключає" або "» і «суворої диз'юнкція» для відрізнення від «звичайного» (невиключає) логічного «або» - нестрогой логічної диз'юнкції . В теорії множин додаванню по модулю 2 відповідає операція симетричної різниці двох множин.

Запис може бути префиксной ( « польський запис ») - знак операції ставиться перед операндами, інфіксной - знак операції ставиться між операндами і постфіксной - знак операції ставиться після операндів. При числі операндів більше 2 префиксная і Постфіксний записи економічніше інфіксной записи. Найчастіше зустрічаються такі варіанти запису:
⊕ 2 (a, b), a {\ displaystyle \ oplus _ {2} (a, b), ~ a} Запис може бути префиксной ( «   польський запис   ») - знак операції ставиться перед операндами, інфіксной - знак операції ставиться між операндами і постфіксной - знак операції ставиться після операндів ^ B, a ⊕ b, a ⊕ 2 b, a + 2 b, {\ displaystyle b, ~ a \ oplus b, a \ oplus _ {2} b, a + _ {2} b,} a ≠ b, a ≠ b, (a, b) ⊕ 2, a X O R b {\ displaystyle a \ neq b, (a, b) \ oplus _ {2}, a ~ XOR ~ b}

В юникоде є символи для складання по модулю 2: XOR - U + 22BB (⊻), CIRCLED PLUS - U + 2295 (⊕) і PLUS SIGN WITH SUCSCRIPT TWO - U + 2A27 (⨧), а також символ для суми по модулю 2: MODULO TWO SUM - U + 2A0A (⨊).

В булевої алгебри складання по модулю 2 - це функція двох, трьох і більше змінних (вони ж - операнди операції, вони ж - аргументи функції). Змінні можуть набувати значень з множини {0, 1} {\ displaystyle \ {0,1 \}} В   булевої алгебри   складання по модулю 2 - це функція двох, трьох і більше змінних (вони ж -   операнди   операції, вони ж - аргументи функції) . Результат також належить множині {0, 1} {\ displaystyle \ {0,1 \}} . Обчислення результату проводиться по простому правилу, або по таблиці істинності . Замість значень 0, 1 {\ displaystyle 0,1} може використовуватися будь-яка інша пара відповідних символів, наприклад f a l s e, t r u e {\ displaystyle false, true} або F, T {\ displaystyle F, T} або «брехня», «істина», але при цьому необхідно доопределять старшинство, наприклад, t r u e> f a l s e {\ displaystyle true> false} .

Таблиці істинності:

Правило: результат дорівнює 0 {\ displaystyle 0} Правило: результат дорівнює 0 {\ displaystyle 0}   , Якщо обидва операнда рівні;  у всіх інших випадках результат дорівнює 1 {\ displaystyle 1} , Якщо обидва операнда рівні; у всіх інших випадках результат дорівнює 1 {\ displaystyle 1} .

Правило: результат дорівнює 0 {\ displaystyle 0} Правило: результат дорівнює 0 {\ displaystyle 0}   , Якщо немає операндів, рівних 1 {\ displaystyle 1}   , Або їх парна кількість , Якщо немає операндів, рівних 1 {\ displaystyle 1} , Або їх парна кількість.

У мовах C / C ++ , Java , C # , Ruby , PHP , JavaScript , Python і т.д. бітова операція поразрядного доповнення позначається символом «^», в мовах Паскаль , Delphi , Ada , Visual Basic - зарезервованим словом xor, в мові асемблера - однойменної логічної командою. При цьому додавання по модулю 2 виконується для всіх бітів лівого і правого операнда попарно. наприклад,

якщо

a = 01100101 2 {\ displaystyle a = 01100101_ {2}} a = 01100101 2 {\ displaystyle a = 01100101_ {2}}

b = 00101001 2 {\ displaystyle b = 00101001_ {2}} b = 00101001 2 {\ displaystyle b = 00101001_ {2}}

то

a ^ b = 01001100 2 {\ displaystyle a {\ hat {\}} b = 01001100_ {2}} a ^ b = 01001100 2 {\ displaystyle a {\ hat {\}} b = 01001100_ {2}}

Рятувальна операція виключає «або» для значень логічного типу (True, false) проводиться в різних мовах програмування по-різному. Наприклад, в Delphi використовується вбудований оператор XOR (приклад: условіе1 xor условіе2). У мові C , Починаючи зі стандарту C99 , Оператор «^» над операндами логічного типу повертає результат застосування логічної операції XOR. В С ++ оператор «^» для логічного типу bool повертає результат згідно описаним правилами, для інших же типів проводиться його побітовое застосування.

Використання побітового виключає «або» дозволяє поміняти місцями значення цілих змінних без використання додаткової пам'яті .

У природній мові операція «складання по модулю» еквівалентна двом виразами:

  1. «Результат правдивий (дорівнює 1), якщо A не дорівнює B (A ≠ B)»;
  2. «Якщо A не дорівнює B (A ≠ B), то істина (1)».

Часто вказують на схожість між складанням по модулю 2 і конструкцією «або ... або ...» в природній мові. Складений твердження «або A, або B» вважається дійсним, коли істинно або A, або B, але не обидва відразу; в іншому випадку складене твердження помилкове. Це в точності відповідає визначенню операції в булевої алгебри, якщо «істину» позначати як 1 {\ displaystyle 1} Часто вказують на схожість між складанням по модулю 2 і конструкцією «або , А «брехня» як 0 {\ displaystyle 0} .

Цю операцію нерідко порівнюють з диз'юнкція тому, що вони дуже схожі за властивостями, і обидві мають схожість з союзом «або» в повсякденній мові. Порівняйте правила для цих операцій:

  1. A ∨ B {\ displaystyle A \ lor B} істинно, якщо істинно A {\ displaystyle A} або B {\ displaystyle B} , Або обидва відразу ( «хоча б один з двох»).
  2. A ⊕ B {\ displaystyle A \ oplus B} істинно, якщо істинно A {\ displaystyle A} або B {\ displaystyle B} , Але не обидва відразу ( «тільки один з двох»).

Операція ⊕ {\ displaystyle \ oplus} Операція ⊕ {\ displaystyle \ oplus}   виключає останній варіант ( «обидва відразу») і з цієї причини називається виключає «АБО» виключає останній варіант ( «обидва відразу») і з цієї причини називається виключає «АБО». Операція ∨ {\ displaystyle \ lor} включає останній варіант ( «обидва відразу») і з цієї причини іноді називається включає «АБО». Неоднозначність природної мови полягає в тому, що союз «або» може застосовуватися в обох випадках.

В квантових комп'ютерах аналог операції додавання по модулю 2 - вентиль CNOT .