Java while循环打印平方数字不能使用int?

1 java types do-while

在Java中,创建一个从2开始的do-while循环,并在数字小于1,000,000时显示每行的平方数.这就是我所拥有的:

int k = 2;
do {
    System.out.println(k);
    k *= k;
} while(k < 1000000);
Run Code Online (Sandbox Code Playgroud)

问题是输出,不知何故它被卡在0并无限循环0到打印出来?我不相信这是因为数字超出了int范围,因为32位数的范围大约是+/- 20亿......但是当我将k的数据类型切换为长的时候工作正常......这是为什么?

har*_*old 5

这真的是由于int.这种方式产生的序列是

2
4
16
256
65536
0
Run Code Online (Sandbox Code Playgroud)

然后它仍然为零.请注意,它永远不会超过1000000.

使用a long,65536之后的数字将是4294967296(它不适合a int,但确实适合a long),因此它会停止.

这在十六进制中可能更明显,然后序列读取(具有足够长的整数)

2
4
0x10
0x100
0x10000
0x100000000
Run Code Online (Sandbox Code Playgroud)

一个int只能保持最低的8个十六进制数字,所以0x100000000变为0.