You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段Java代码执行后输出负数?

为什么这段Java代码输出负数?

你的代码里,x = x + 2 * x 等价于 x = 3 * x,也就是每次循环x都会变成原来的3倍。循环执行了30次(i从1到30,因为i < 31),最终要计算的是3^30的值。

问题出在Java的int类型限制上:

  • int是32位有符号整数,取值范围是 -2147483648 到 2147483647(也就是-2^31到2^31-1)。
  • 3^30的实际值是205891132094649,这个数远大于int能容纳的最大值2147483647,发生了整数溢出。

对于有符号整数来说,溢出后会按照补码规则循环:当数值超过最大值时,会从最小值开始往下计数,所以最终结果变成了负数。

要解决这个问题,只需要把x的类型换成long(64位有符号整数,范围足够容纳3^30),修改后的代码如下:

public class Program {
    public static void main(String[] args) {
        long x = 1;
        for (int i = 1; i < 31; i++) {
            x = x + 2 * x;
        }
        System.out.println(x);
    }
}

运行后会输出正确的205891132094649。

内容的提问来源于stack exchange,提问作者Connor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:31:00