'^' steht in C für exclusive-or.

Eigentlich sollte gar nix gehen, weil "eins % i" beim ersten Durchlauf zu "eins % 0" auswertet, und das ist nicht definiert. Jedenfalls hast du kein definiertes Ergebnis oder läufts auf ne trap.