Java 求负数的和方法

Java 求负数的和方法,java,sum,Java,Sum,这个程序给出了正确的答案,但我不明白怎么做。因为y是-ve,我在做y--,这使得它远离0,而不是朝向它。那么这个程序是如何给我正确答案的呢?一个int可以容纳2^31-1的最大值和-2^31的最小值。当该值超过这些值时,会发生整数溢出,这意味着您将忽略它,它将环绕,数字将变为相反的符号。(如果将一个添加到最大值,它将变成-2147483648) 换个说法吧。设想一个时钟,除了它从0到2147483647(在6的位置),然后立即到-2147483648,然后回到0。(请注意,-2147483648

这个程序给出了正确的答案,但我不明白怎么做。因为
y
-ve
,我在做
y--
,这使得它远离
0
,而不是朝向它。那么这个程序是如何给我正确答案的呢?

一个
int
可以容纳
2^31-1
的最大值和
-2^31
的最小值。当该值超过这些值时,会发生整数溢出,这意味着您将忽略它,它将环绕,数字将变为相反的符号。(如果将一个添加到最大值,它将变成
-2147483648

换个说法吧。设想一个时钟,除了它从
0
2147483647
(在
6
的位置),然后立即到
-2147483648
,然后回到
0
。(请注意,
-2147483648
2147483647
位于常规时钟上的
6
两侧)


所以说,
y
是一只手,从
-5
开始向
-2147483648
移动,
ans
是10,向
1073741823
移动。当循环继续且
y
继续逆时针移动时,
y
将从
-2147483648
传递到
2147483647
并最终归零,退出循环。同时,
ans
也将从
2147483647
-2147483648
传递,然后在
ans==5

时停止,这可能会运行很长时间,并且溢出
ans
和下溢
y
Integer.MIN\u值-1
Integer.MAX\u值
,然后继续运行,直到
0
public void getSum(int a, int b) {
    int x=10;
    int y=-5;

    int ans = x;
    while (y != 0) {
        ans++;
        y--;
    }
    System.out.println("ans = " + ans);
}
                         (0)
                          |




(-1073741824) -           *               - (1073741823)




                          |  
            (-2147483648)   (2147483647)