如何解决 a+b >c 和 a*b 和 a-b 的 integer overflow 问题

本文详细介绍如何在C/C++中检测整数加法、减法及乘法运算时可能出现的溢出情况,并提供具体的代码实现。对于加法和减法,通过比较操作数与INT_MAX或INT_MIN来判断是否会发生溢出;对于乘法,则需进一步考虑特殊值-1与INT_MIN相乘的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注: a 和 b  都是 int 型 的。


To create a conforming program you need to test for overflowbefore generating said overflow. The method can be used with unsigned integers too

// for addition
#include <limits.h>
int a = <something>;
int x = <something>;
if ((x > 0) && (a > INT_MAX - x)) /* `a + x` would overflow */;
if ((x < 0) && (a < INT_MIN - x)) /* `a + x` would underflow */;



// for subtraction
#include <limits.h>
int a = <something>;
int x = <something>;
if ((x < 0) && (a > INT_MAX + x)) /* `a - x` would overflow */;
if ((x > 0) && (a < INT_MIN + x)) /* `a - x` would underflow */;


// for multiplication
#include <limits.h>
int a = <something>;
int x = <something>;
if (a > INT_MAX / x) /* `a * x` would overflow */;
if ((a < INT_MIN / x)) /* `a * x` would underflow */;
// there may be need to check for -1 for two's complement machines
if ((a == -1) && (x == INT_MIN)) /* `a * x` can overflow */
if ((x == -1) && (a == INT_MIN)) /* `a * x` (or `a / x`) can overflow */

for division (except for the INT_MIN and-1 special case) there is no possibility of going over INT_MIN orINT_MAX.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值