【发布时间】:2011-03-29 19:45:27
【问题描述】:
为什么下面的代码会打印 2147483647,实际值是 2147483648?
i = (int)Math.pow(2,31) ;
System.out.println(i);
我知道 int 可以容纳的最大正值是 2147483647。那么为什么像这样的代码会自动换行到负端并打印 -2147483648?
i = (int)Math.pow(2,31) +1 ;
System.out.println(i);
i 是整数类型。如果第二个代码示例(两个整数相加)在结果超出正数范围时可以换行到负数,为什么第一个示例不能换行? 还有,
i = 2147483648 +1 ;
System.out.println(i);
与第二个代码示例非常相似会引发编译错误,说第一个文字超出整数范围? 我的问题是,根据第二个代码示例,为什么第一个和第三个示例不能自动换行?
【问题讨论】:
-
为了澄清,这与
java.lang.Integer无关,与int不同。 -
这有什么关系?即使我将其转换为 (Integer) 而不是 int,问题(或问题)也将是相同的。
标签: java