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)