4
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?

4

1 回答 1

8

为什么 3 的乘积是 0?

你的乘法是在int算术中完成的,它溢出了,结果为 0。你基本上是在做 2 24 * 2 24,即 2 48 - 结果的底部 32 位都是 0。你分配的事实对a 的操作结果long不会更改用于执行操作的类型。

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

private static final long RESULT  = (long) FIRST * SECOND * THIRD;
于 2013-08-22T07:42:21.313 回答