気になったので知らべてみたら、、

なんと、signed Integer と signed long のサイズと最大値、最小値が全く同じだった(Linux,OSXでは)
どちらも32bit符号付き整数なので、2147483647から-2147483648まで。これは2^31 - 1から - 2^31のこと。
先頭1bitを符号に使うので、数値部分は31bitになってしまう。
とはいうものの、signed Integer は本来 16bit符号付きとして使う方がよいらしい。

$ perl -e 'printf "%u\n",(1 << 32)'
0

これは2進数の1を32桁移動させられると、0しかなくなっちゃうってことなのかな
0になるくらいならエラーにしてくれたらいいのに。

$ ruby -e 'printf "%d\n",(1 << 32)'
4294967296

こちらはちゃんと計算してくれている。