Вопросы на собеседовании #5

Как поменять местами 2 переменные без использования третьей?

Пусть нам даны 2 переменные a=3 и b=2. Нужно получить a=2 и b=3.

Способ №1

a = a + b  
b = a - b  
a = a - b  

Недостатоки: В случае когда переменные a и b типа int можно выйти за границы этого типа.

Способ №2

С помощью сложения по модулю 2 (XOR).

a = a ^ b # a = 1  
b = a ^ b # b = 3  
a = a ^ b # a = 2  

Матрица состояний:

a b xor
0 0 0
0 1 1
1 0 1
1 1 0

Для простоты запоминания, в случае бинароной операции, если аргументы равны, то значение 0, если различны, то 1, с тернарным случаем все ненамного сложнее, если количество аргументов равных единице нечетное, то функция принимает значение 1, во всех остальных случаях 0.