Вопросы на собеседовании #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.