Java整数范围外的问题
Java中Integer范围
在Java中,Integer的范围是2-31到231-1,如果超出范围了怎么办?使用左移运算验证
左移运算是将二进制向左乘以1位,即数字乘以2。
system.out.println(1;
system.out.println (integer.tobinarystring (1) );
system.out.print ln (---------);
system.out.println(11;
system.out.println (integer.tobinarystring (1) );
已知Integer的二进制为32比特,当1向左位移31比特时,达到最高位,即Integer的最小值。
system.out.println (integer.tobinarystring (131 ) );
system.out.println(131;
system.out.println (integer.min _ value;
那么,这时再左移一位会怎么样?
system.out.println (integer.tobinarystring (132 ) );
system.out.println(132;
从结果中可以看出,超过范围时,上位位数会发生溢出,回到最下位位数重新开始。 可以理解为最高位的下一位是最低位,即第31位之后是0,1现在位于第31位,再向左移动1位返回第0位,即返回十进制1的循环。
总结
在Java中,数值范围、Integer、Long等整数型在范围达到最大范围、溢出时返回最低有效位,然后重新开始。 同样向下溢出的也一样。