我刚刚在Java中玩游戏.写了这个小程序:
public class MaxValue{
public static void main(String[] args){
int i = Integer.MAX_VALUE;
for(int j = 1; j<=10;j++){
System.out.println(i*j);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
2147483647
-2
2147483645
-4
2147483643
-6
2147483641
-8
2147483639
-10
现在我很惊讶.我不知道如何解释这个输出.我知道我可以使用long代替处理超过整数最大限制的值.但是我只想知道java如何计算这个?
我们需要分析结果的二进制内容:
Integer.MAX_VALUE * 1 = 0x7fffffff 十进制 2147483647
Integer.MAX_VALUE * 2 = 0xfffffffe 即 -2
Integer.MAX_VALUE * 3 = 0x17ffffffd 但它是33位,截断后是0x7ffffffd,即2147483645
等等...
| 归档时间: |
|
| 查看次数: |
2345 次 |
| 最近记录: |