^ - битовый XOR-оператор.Битовый x XOR 1
переключает последний бит x (1 xor 1 = 0
, 0 xor 1 = 1
), поэтому он обменивает 0 и 1, 2 и 3 и т. Д.
Так что теперь у вас есть способ поменять местами 0и 1, 2 и 3, или, в этом отношении, места 2 и 3, 3 и 4.
Чтобы использовать это для обмена 1 с 2, 3 и 4, вы можете сначала сопоставить 1, 2, 3, 4
с 2, 3, 4, 5
, примените XOR
, затем сопоставьте результат обратно с 1, 2, 3, 4
.
Функция, которая сопоставляет 1, 2, 3, 4
с 2, 3, 4, 5
: f(x) = x+1
.Обратное g(x) = x-1
.
Итак, что вы получите: h(x) = g( xor1( f(x) ) )
.Это в точности ваша формула: примените ^1
к id+1
, (id+1)^1
, затем отмените подстановку, применив x-1
к этому результату, и вы получите ((id+1)^1)-1
.
Другая подстановка была бысопоставить 1, 2, 3, 4
с 0, 1, 2, 3
(с f(x) = x-1
и g(x) = x+1
), давая вам окончательную формулу ((id-1)^1)+1
.