如果你不知道X是什么,它可能是最糟糕的情况。那么,什么是最坏的情况:
int X = Integer.MAX_VALUE;
long aLong = X + 1;
结论:你不想让Eclipse警告你一切。
如果你要修复
long aLong = X * Y * Z; //you could write
long aLong = (long)X * Y * Z;
结论的整数溢出:这不会解决长期溢出问题。如果要解决这些问题,你应该写这样的代码:
BigInteger tmp = BigInteger.valueOf(X).multiply(BigInteger.valueOf(Y)).multiply(BigInteger.valueOf(Z));
if(BigInteger.valueOf(Long.MAX_VALUE).compareTo(tmp)>=0){
long aLong = tmp.longValue();
}else{
System.out.println("Overflow");
}
但这只会检查,如果结果值可以适合长时间。但是你问,如果在计算过程中发生“溢出”。这意味着在每次计算之后,您需要检查这一点。
如果你想编写一个eclipse工具来解析整个源文件来找到它,那么我不会阻止你。但是,它会更容易记住以下值:
/*11111111111111111111111111111111*/int Y = -1; //-1
/*11111111111111111111111111111111*/int QRY = (Y >> 1); //-1
/*11111111111111111111111111111110*/int QLY = (Y << 1); //-2
/*11111111111111111111111111111110*/int QLX = (X << 1); //-2
/*11000000000000000000000000000000*/int QRZ = (Z >> 1); //-1073741824
/*10000000000000000000000000000000*/int Z = Integer.MIN_VALUE; //-2147483648
/*01111111111111111111111111111111*/int X = Integer.MAX_VALUE; // 2147483647
/*00111111111111111111111111111111*/int QRX = (X >> 1); // 1073741823
/*00000000000000000000000000000000*/int QLZ = (Z << 1); // 0
因此,您想要警告任何算术操作吗?如果a,x和y是相同的积分类型,则a = x + y会溢出 – Mark 2009-09-17 21:42:47
我希望也有这样的检查,但仅用于乘法。我正在进行比赛编程,通常值高达10^9,所以加法不是问题,但乘法是,我想要警告,否则我忘了'1L * x * y'技巧... – Betlista 2014-12-02 10:38:20