首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成算术溢出

生成算术溢出
EN

Stack Overflow用户
提问于 2019-05-15 10:29:10
回答 1查看 60关注 0票数 1

为什么这两个值会产生零输出。我以为它会产生一个算术溢出,但就像a和b一样,符号是相反的。

代码语言:javascript
复制
#include <stdio.h>
// trying to generate an arithmetic overflow
int sum(int a, int b) {
    return a + b;
}
int main()
{
    int a=2147483648;
    int b=2147483648;
    printf("%d", sum(a,b));
    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2019-05-15 11:54:30

对于您的特定计算机上的特定编译器,int a=2147483648;在本质上与被视为int a=INT_MIN;int a=INT_MAX+1;相同,对于int b也是如此,这导致了return INT_MIN+INT_MIN;,实际上类似于"0x80000000 + 0x80000000 = 0x100000000 = 0x00000000 with overflow“。

然而,以上所有情况都依赖于未定义的行为(假设未定义的行为在实践中意外地导致了包装)。

通常,您希望使用unsigned int (或者更好的uint32_t)来避免未定义的行为,并获得您所希望的“预期溢出”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56141000

复制
相关文章

相似问题

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