Яку математичну операцію виконує XOR?
Яку математичну операцію виконує XOR?
Відповіді:
XOR - це двійкова операція, вона означає "ексклюзивна або", тобто отриманий біт обчислюється як одиниця, якщо встановлено лише один із бітів.
Це його таблиця функцій:
a | b | a ^ b
--|---|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Ця операція виконується між кожними двома відповідними бітами числа.
Приклад: 7 ^ 10
у двійковому:0111 ^ 1010
0111
^ 1010
======
1101 = 13
Властивості: Операція комутативна, асоціативна та самообернена.
Це також те саме, що додавання за модулем 2.
^
є оператором побітового виключає Python . Це те, як ви пишете XOR
на python:
>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 1 ^ 0
1
>>> 1 ^ 1
0
XOR означає ексклюзивне АБО . Він використовується в криптографії, тому що він дозволяє вам "перевертати" біти, використовуючи маску в зворотній операції:
>>> 10 ^ 5
15
>>> 15 ^ 5
10
де 5
знаходиться маска; (вхідна маска XOR) Маска XOR знову вводить дані.
Трохи більше інформації про роботу XOR.
Одне, про що інші відповіді тут не згадують, - це XOR з від’ємними числами -
a | b | a ^ b
----|-----|------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Незважаючи на те, що ви могли легко зрозуміти, як XOR працюватиме, використовуючи наведену вище функціональну таблицю, це не говорить про те, як він буде працювати з від’ємними числами.
Оскільки це запитання також позначено як python, я відповім на нього з урахуванням цього. Що виключає АБО ( ^
) являє собою логічний оператор , який повертає 1 , коли біти різні і 0 в інших місцях.
Від’ємне число зберігається у двійковому вигляді як доповнення двох . У додатку 2, крайня ліва бітова позиція зарезервована для знака значення (позитивного чи негативного) і не сприяє значенню числа.
У Python від’ємні числа записуються з початковим замість нуля. Отже, якщо ви використовуєте лише 8 бітів для чисел доповнення двох , тоді ви розглядаєте шаблони від
00000000
до01111111
як цілі числа від 0 до 127 і резервуєте1xxxxxxx
для запису від’ємних чисел.
Маючи це на увазі, давайте на прикладі зрозуміємо, як XOR працює з від’ємним числом. Давайте розглянемо вираз - ( -5 ^ -3 )
.
-5
може розглядатися як 1000...101
і-3
може розглядатися як 1000...011
.Тут ...
позначаються всі 0, кількість яких залежить від бітів, що використовуються для представлення (32-бітні, 64-бітні тощо). Значення 1
на MSB (найбільш значущий біт) означає, що число, представлене двійковим поданням, є від'ємним. Операція XOR буде виконуватися на всіх бітах, як зазвичай.
-5 : 10000101 |
^ |
-3 : 10000011 |
=================== |
Result : 00000110 = 6 |
________________________________|
∴ -5 ^ -3 = 6
Оскільки MSB стає 0 після операції XOR, тож отримане нами число є додатним числом. Подібним чином, для всіх від’ємних чисел ми розглядаємо їх подання у двійковому форматі, використовуючи доповнення 2 (одне з найбільш часто використовуваних), і робимо простий XOR для їх двійкового подання.
Наступна таблиця може бути корисною для визначення ознаки результату.
a | b | a ^ b
------|-------|------
+ | + | +
+ | - | -
- | + | -
- | - | +
Основні правила XOR залишаються незмінними і для негативних операцій XOR, але те, як дійсно працює ця операція в від’ємних числах, може бути корисним для когось колись 🙂.
Ще одна заявка на XOR
це в ланцюгах. Він використовується для підсумовування бітів.
Коли ви дивитесь на таблицю правди:
x | y | x^y
---|---|-----
0 | 0 | 0 // 0 plus 0 = 0
0 | 1 | 1 // 0 plus 1 = 1
1 | 0 | 1 // 1 plus 0 = 1
1 | 1 | 0 // 1 plus 1 = 0 ; binary math with 1 bit
Ви можете помітити, що результат XOR
x додається з y, не відстежуючи біт перенесення, біт перенесення отримується з AND
між x і y.
x^y // is actually ~xy + ~yx
// Which is the (negated x ANDed with y) OR ( negated y ANDed with x ).
Оператор (^) XOR генерує 1, коли він застосовується до двох різних бітів (0 та 1). Він генерує 0, коли застосовується до двох однакових бітів (0 і 0 або 1 і 1).