型の問題もあるが(万全を期するなら整数を全部キャストしたほうがいいと思われ)

 ^ ←が本当にべき乗の演算子なのかが一番不安なのだが。
C/C++だとコンパイルエラー吐いてくれないので(XORになって)、
俺もデバッグに苦労したことがあるyo。