加法乘法判断溢出(转)

#include <limits.h>

int is_overflow_add_for_unsigned_int( unsigned int a, unsigned int b )
{
return UINT_MAX - a < b;
}

int is_overflow_add_for_signed_int( int a, int b )
{
return a >= 0 ? INT_MAX - a < b : INT_MIN - a > b;
}

int is_overflow_multiply_for_unsigned_int( unsigned int a, unsigned int b )
{
return a == 0 ? 0 : UINT_MAX / a < b;
}

int is_overflow_multiply_for_signed_int( int a, int b )
{
return a == 0 ? 0 :
a > 0 && b > 0 || a < 0 && b < 0 ? INT_MAX / a < b : INT_MIN / a > b;
}

原文地址:https://www.cnblogs.com/chenglongxu/p/5445915.html