Javaの左シフト

Javaでビット操作をするマクロを書いていたんだけど、すげーことに気が付いた。

1<<32

これの結果、なんだと思いますか?


答えは、です。
どうやら、シフトでintの上限を超えるとロールしてしまうらしい(;´Д`)
つまり、

1<<33

は2になるし、

1<<35

は8になった(;´Д`)


これ、DoJa3.0のエミュレータでしか試してないんだけど、JavaVMの仕様なのかな?
そうだとすれば結構ひどい仕様だと思うんだけど……。


ちなみに、きちんと32bitシフトをしたかったら、

(int)((long)1<<32)

で0になります。
微妙だなぁ……。