为什么我的int乘法结果是错误的?

Bir*_*nii 0 java integer integer-arithmetic

我有以下代码,其中结果超出了整数类型变量可以存储的限制,并且需要了解为什么我得到这个结果(268,435,456=2^28)

public static void main(String[] args) {
int x = 16+256;
for( int i =0; i<6; i++) {
            x*=16;
        }
        System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)

Daw*_*ica 5

考虑一下所有以二进制表示的值的情况。

最初,x = 00000000000000000000000100010000。然后每次乘以 16 时,都会在右侧添加 4 个零,并从左侧删除 4 个数字。

所以你会得到像这样的结果

00000000000000000001000100000000
00000000000000010001000000000000
Run Code Online (Sandbox Code Playgroud)

等等。但是,一旦执行了 6 次,第一次1就会从数字的左端消失 - 这就是整数溢出。所以你只剩下

00010000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

这是 2 的 28 的结果。