【发布时间】:2021-05-25 05:53:04
【问题描述】:
在我的 C++ 代码中:
int c=(a+b)/2;
我确定最终结果不会导致整数溢出,但这不能保证 (a+b)
这是我的错误信息:
第 20 行:字符 27:运行时错误:有符号整数溢出:1063376696 + 2126753390 无法在类型“int”中表示 (solution.cpp) 摘要:UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:31:27
我该如何解决这类问题?
【问题讨论】:
-
大概你的意思是整数溢出,而不是堆栈溢出。如果 a 和 b 是整数并且相加时可以大于 2^31,那么您需要更大的数据类型,例如 int64
-
第 20 行:字符 27:运行时错误:有符号整数溢出:1063376696 + 2126753390 不能用类型“int”表示(solution.cpp) 摘要:UndefinedBehaviorSanitizer:未定义行为 prog_joined.cpp:31: 27
-
@bennji_of_the_overflow 没有帮助,请参阅我的错误消息
-
@daniel “查看我的错误消息” - 你的意思是屏幕上我们看不到的那个?我们不是介意读者。错误消息属于您的问题。不管怎样,
int c = a + (b-a)/2;,在b >= a保水的前提下,会防止a+b的添加剂溢出。 -
@WhozCraig 太棒了!