int和longs之间的java乘法给出0

时间:2013-08-22 07:40:22

标签: java int type-conversion long-integer multiplication

private static final int FIRST  = 8;
private static final int SECOND = (4 * 1024 * 1024)/8;
private static final int THIRD = (4 * 1024 * 1024);
private static final long RESULT  = FIRST *SECOND * THIRD;

为什么3的产品是0?

1 个答案:

答案 0 :(得分:8)

  

为什么3的产品是0?

你的乘法是在int算术中进行的,并且它是溢出的,结果为0.你基本上做2 24 * 2 24 ,即2 48 - 并且结果的底部32位全部为0.将操作的结果分配给long的事实没有t更改用于执行操作的类型。

要使用64位整数运算执行算术,只需将操作数更改为long

private static final long RESULT  = (long) FIRST * SECOND * THIRD;