Факт первый: x XOR x
- ноль.
Это следует из того факта, что 0 XOR 0
- ноль, а 1 XOR 1
- ноль.
Факт два: x XOR x XOR x ... x
- ноль, где x
- четное число раз.
Это следует из первого факта по индукции.
Факт третий: x XOR x XOR x ... x
- это x
, где x
- нечетное число, если раз.
Это следует из факта два, записав выражение как
(x XOR x XOR x ... x) XOR x = 0 XOR x = x
где в скобках есть 2n
терминов, если в оригинале было 2n + 1
терминов.
Факт четвертый: XOR
ассоциативен и коммутативен.
Это тривиально дляпроверь.
Теперь понятно, как работает этот код.Числа, которые появляются четное число раз, уменьшаются до нуля этим кодом.Единственное число, которое появляется нечетное количество раз, сокращается до этого кода.