【发布时间】:2017-06-02 20:50:32
【问题描述】:
为什么在案例 2:Java 7 上对于相同的值会有两个不同的答案?
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println("Case 1:");
long size=(long)1<<39;
System.out.println("size :"+size);
size=1024*1024*1024*512l;
System.out.println("size :"+size);
System.out.println("Case 2:");
size=(long)1<<41;
System.out.println("size :"+size);
size=1024*1024*1024*1024*2l;
System.out.println("size :"+size);
}
}
Ideone 的答案如下。
Case 1:
size :549755813888
size :549755813888
Case 2:
size :2199023255552
size :0
【问题讨论】:
-
改成
1024L*1024L*1024L*1024L*2L看看会发生什么。 -
或
(long)1024*1024*1024*1024*2,它们将是相同的 -
@RealSkeptic 只有第一个操作数需要是双字面量,对吧?
-
@AndrewLi 是的,但是如果你使用的是 long,你最好养成使用 long 字面量的习惯。
-
我同意你的观点,但是为什么案例 1 有效?即尺寸=1024*1024*1024*512l; System.out.println("尺寸:"+尺寸); .它给出的结果大于 (2^31) - 1。
标签: java bit-manipulation type-conversion