【问题标题】:Unexpected output in Java while adding of two Integers [duplicate]添加两个整数时Java中的意外输出[重复]
【发布时间】:2020-03-21 18:11:42
【问题描述】:

我是java语言的新手,这里m看不懂,为什么程序在两个满范围整数相加后返回-2。

class Variables {
    public static void main(String[] args) {
        int a = 2147483647;
        int b = 2147483647;
        long c = a + b;
        System.out.println( c );
    }
}

我在变量 c 中压缩了 4294967294 值,但为什么它返回 -2 请解释一下这背后的原因

【问题讨论】:

  • 你刚刚到达整数溢出,int首先作为整数相加,然后转换为long,但为时已晚
  • 建议 - 了解整数在内存/二进制中的表示方式。然后学习二进制加法。然后你会更好地理解

标签: java


【解决方案1】:

你到达Integer.MAX_VALUE所以你要去-2147483648,然后再次添加Integer.MAX_VALUE将导致-2

要获得4294967294,您需要先将一个值转换为long,然后才能对long求和,而不是int一个

int a = 2147483647;
System.out.println(a + 1); //-2147483648

int b = 2147483647;
System.out.println(a + b); // -2

long c = a + (long) b; // or ((long) a) + b;
System.out.println(c); //4294967294

【讨论】:

    【解决方案2】:

    添加两个ints 的结果是一个int,当然overflows 当你添加ab 时。只有这样,它才会被提升为long

    在执行加法之前,您可以通过将其中一个转换为long 来获得预期的结果:

    long c = ((long) a) + b;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 2013-07-07
      • 1970-01-01
      • 2012-08-25
      相关资源
      最近更新 更多