求和方法为负数

时间:2018-08-26 02:11:57

标签: java sum

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);
}

该程序给出了正确的答案,但我不知道如何。因为y-ve,而我正在做y--,这使它远离0而不是朝着它。那么这个程序如何给我正确的答案?

1 个答案:

答案 0 :(得分:1)

int的最大值为2^31-1,最小值为-2^31。当值超过这些值时,将发生整数溢出,这意味着您要遍历,它会回绕,并且数字变成相反的符号。 (如果您将最大值加1,它将变成-2147483648

让我们换一种说法。设想一个时钟,除了它从02147483647(在6所在的地方),然后立即到-2147483648,然后再回到0 。 (请注意,-21474836482147483647位于常规时钟上6的两侧)

                         (0)
                          |




(-1073741824) -           *               - (1073741823)




                          |  
            (-2147483648)   (2147483647)

因此,假设y是一只手,从-5开始并开始向-2147483648移动,而ans是10,并且正在向1073741823移动。随着循环的继续,y继续沿逆时针方向移动,y将从-2147483648传递到2147483647,最后变为零,退出循环。同时,ans也将从2147483647 -2147483648经过,然后在ans == 5时停止。