java - Java中大整数相乘后达到零

标签 java

我有以下方法:

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,因为 x 的最低 32 位都是 0(因为 x 是一个非常2 的大次幂),32 个 0int0

关于java - Java中大整数相乘后达到零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50110213/

相关文章:

java - GridBagLayout 中的 JTextField ActionListener

java - 可以通过浏览器运行普通的Java文件吗?

java - vaadin (14.4.4) 应用程序 : Failed to determine project directory for dev mode . .. 在部署之前生成 "flow-build-info.json"

java - 如何使用 Java 和 MySql 获取 Json 中正确的日期格式

java - Activity 不是 Android Studio 中的封闭类

Java - 字节的模加法

java - Selenium /页面工厂 : Find child elements using parent element's @FindBy?

java - CentOS 6.x 上的 jsvc 1.0.15 安装

java - 为什么@FormParam 不支持content=type=application/json?

java - 如何使用 Intent 打开用户的个人资料联系人?