Небольшое отступление: символ '^' (знак вставки или округлый знак) имеет другое значение при использовании в качестве бинарного оператора:
a ^ b
означает XOR b. XOR (иначе исключающее ИЛИ) - это двоичная арифметическая операция, в которой результат имеет 1 в любой битовой позиции, где a или b имеют 1, но не оба.