Jest to operacja bitowa, czyli działa na bitach, a nie na całej liczbie. Samo działanie polega na tym, że zwraca 1 tylko wtedy, gdy oba bity na wejściu są różne.
Co do zamiany liczb, to najlepiej rozpisz sobie wszystko na kartce. Działa to też dla jednej zmiennej i jakiejś stałej.
X ^= 123;
X ^= 123;
Po tych operacjach X się nie zmieni i z tego można wyprowadzić zamianę liczb. Możesz to sobie udowodnić na kartce. Można tego użyć jako prymitywnego szyfrowania które sprawia, że w prost nie można nic przeczytać, ale szyfrowanie, odszyfrowywanie i łamanie szyfrogramu jest bardzo łatwe.
@edit Stwierdziłem, że lepiej wstawić tutaj dowodzik, aby nie było wątpliwości.