我有以下方法:
int x= (int) Math.pow(2, 5);
for (int k=1; k <= 3; k++) {
x *= (2*x);
}
System.out.println(x); // prints 0
它只是将 x 初始化为 32,然后在循环的每次迭代中将其乘以其两倍。但是,我希望输出是一个大数字或至少是一个错误,但最终输出是 0。不,我尝试通过添加以下内容来进行一些调试:
int x= (int) Math.pow(2, 5);
for (int k=1; k <= 3; k++) {
System.out.println(x + " * " + 2 * x);
x *= (2*x);
}
System.out.println(x);
但输出是这样的:
32 * 64
2048 * 4096
8388608 * 16777216
0
有谁知道为什么数字突然变成0?
二进制中的 32 是100000
2 的幂。您的“更新过程”x = 2 * x * x;
保持此属性 -x
始终是 2 的(更大的)幂。在最后一次迭代中,您看到x
溢出,因为int
数据类型仅存储 32 位,并且的二进制表示x
超过 32 位。打印的值正是0
因为 的最低 32 位x
都是0
(因为x
是 2 的非常大的幂),而int
320
的 是0
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句