关于Java的位运算。。。。。。。。。

为什么Java中的1 左移32为之后还是为1?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

如下程序测试了一下左移32,33,左移64,65的结果和原值,左移一位的结果是一样的。
可能java支持循环左移。也可能会判断,如果超过可移动的位数(这里int是32位),进行求余处理。左移32位, 32%32=0就左移0位, 33%32=1就左移一位。
这个需要深入虚拟机原理看看左移是如何实现的

public class Test {

  public static void main(String args[]) {
    int nValue = 0XF50000AF;

    System.out.println(Integer.toBinaryString(nValue));
    System.out.println(Integer.toBinaryString(nValue << 1));

    System.out.println(Integer.toBinaryString(nValue << 32));
    System.out.println(Integer.toBinaryString(nValue << 33));

    System.out.println(Integer.toBinaryString(nValue << 64));
    System.out.println(Integer.toBinaryString(nValue << 65));
  }

}
11110101000000000000000010101111
11101010000000000000000101011110

11110101000000000000000010101111
11101010000000000000000101011110

11110101000000000000000010101111
11101010000000000000000101011110