为什么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