§ XOR
Как-то давно я увидел интересный приемчик, который позволяет обменять 2 числа, не используя при этом каких-то специальных возможностей, и дополнительного места в памяти. Алгоритм приводился вот в таком виде:B = A ^ B A = A ^ B B = A ^ BВсе это интересно, но я решил докопаться до истины и понять, почему этот алгоритм вообще работает. Все оказалось намного проще, чем бы я мог подумать и вот почему. Дело в том, что XOR обладает одной уникальной возможностью:
X ^ X = 0
Где X - это любое число. Получается, что применяя таким образом XOR, можно обнулять значения. А это удобно!
§ Вывод
Тогда приступим. Первый шаг алгоритма дает следующее:- B = A ^ B
- A = A ^ B = A ^ (A ^ B)
- A = A ^ A ^ B = B
И все завершает последний штрих:
- B = A ^ B
- B = B ^ (A ^ B) = B ^ A ^ B = A
Обмен произошел успешно и я это доказал, и рад такому незначительному, но эффектному событию!
§ Пример
Теперь пришло время для того, чтобы показать, что это реально работает:A = 4 B = 8 B = A ^ B = 4 ^ 8 = 12 A = A ^ B = 4 ^ 12 = 8 B = A ^ B = 8 ^ 12 = 4То есть на выходе получаем A=8, B=4, хотя на входе было A=4, B=8.