首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++防止Int溢出的附加?

C++防止Int溢出的附加?
EN

Stack Overflow用户
提问于 2021-02-22 23:38:04
回答 3查看 873关注 0票数 1

在我的C++代码中有:

代码语言:javascript
运行
复制
int c=(a+b)/2;

我确信最终的结果不会导致整数溢出,但这是不能保证的(a+b)

以下是我的错误信息:

第20行: Char 27:运行时错误:有符号整数溢出: 1063376696 + 2126753390不能用'int‘(solution.cpp)类型表示

怎样才能解决这类问题?

EN

回答 3

Stack Overflow用户

发布于 2021-02-22 23:44:30

您可以使用64位ints进行操作,然后将其转换为32位。

代码语言:javascript
运行
复制
int c = int((std::int64_t(a) + std::int64_t(b)) / 2);
票数 3
EN

Stack Overflow用户

发布于 2021-02-23 04:10:41

  1. 使用避免溢出的标准库函数:

性病:中点(a,b);

  1. 转换为更大的类型,可以避免溢出:

static_cast(b))/2); ((static_cast(A)+static_cast))

  1. 使用特定于编译器的标志(例如-ftrapv )或内置标记(例如__builtin_add_overflow)检测它:

如果(a,b,&__builtin_add_overflow)抛出std::out_of_range("overflow");

  1. 以避免溢出的方式执行计算(将其分解为各种情况,并计算出在每种情况下如何避免溢出):

使用U=无符号int;返回a>b?a-(static_cast(a)-b)/2:

https://godbolt.org/z/T3rPdq

票数 1
EN

Stack Overflow用户

发布于 2021-12-05 10:42:25

只需使用int c=a+(B)/2;如果a和b都为正。否则,您可以使用上述方法。

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

https://stackoverflow.com/questions/66325015

复制
相关文章

相似问题

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