首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的Int溢出

Java中的Int溢出
EN

Stack Overflow用户
提问于 2015-09-12 14:04:02
回答 2查看 120关注 0票数 1

假设,我有一个简单的方法:

代码语言:javascript
复制
public int add(int a, int b) {
    return a + b;
}

如果我用max int值运行它

代码语言:javascript
复制
add(2147483647, 2147483647);

我得到了-2。我发现,如果我们溢出int,然后转到最小整数值(-2147483648)并继续添加。

我们来算一算吧。如果我添加2147483647 + 2147483647,我应该得到-1,因为

代码语言:javascript
复制
-2147483648 + 2147483647 = -1

那我为什么要得到-2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-12 14:08:57

你可以这样想:

代码语言:javascript
复制
  2147483647 + 2147483647
= 2147483647 + ( 1 + 2147483646 )
= ( 2147483647 + 1 ) + 2147483646
= -2147483648 + 2147483646  // Because of overflow
= -2

也就是说,要使左2147483647溢出,必须向其添加1。这1来自右手2147483647,所以现在只剩下2147483646了.

当然,在内部,它是通过2s-补语加法完成的,而不是通过添加1s直到你到达终点。以上只是澄清了数学。

票数 6
EN

Stack Overflow用户

发布于 2015-09-12 14:10:05

我们做点数学吧。麦克斯是2147483647,而min是-2147483648

代码语言:javascript
复制
2147483647 + 1 = -2147483648
2147483647 + 2 = -2147483647
...
2147483647 + n = -2147483648 + n - 1

对于n = 2147483647给出的

代码语言:javascript
复制
2147483647 + 2147483647 = -2147483648 + 2147483647 - 1 = -1 - 1 = -2
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32539712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档