当计算有符号整数加减法时需要检验是否溢出时:
在此,仅讨论加法的溢出问题(减法可以转换为加一个负数)。
1. x y 皆为正数时, 若 x+y<0 则说明发生了溢出;
2. x y 皆为负数是,若 x+y>=0 则说明发生了溢出(注意: INT_MIN +INT_MIN =0 );
其实, INT_MIN ,INT_MIN+1,......... -3,-2 ,-1 ,0 ,1 , 2, 3,.......... INT_MAX ;
它们可以看成是形成了循环,INT_MIN 与 INT_MAX 相接,即首尾相接;
INT_MAX +1 =INT_MIN ;
INT_MIN -1 =INT_MAX ;
bool IsAddOverflow (int x, int y)
{
if((x>0 && y>0 && x+y<0) || (x<0 && y<0 && x+y>=0))
{
return false;/*未溢出*/
}
else
{
return ture ; /*溢出*/
}
}