如何判斷整數資料的溢位

塵虛緣_KY發表於2016-06-25
 對於C/C++語言來說,分為無符號整數和有符號整數兩種,幾乎在所有機器中他們都是用補碼錶示的,判斷兩個整數相加是否溢位的方法如下:
(1)無符號整數相加,如果結果小於其中任何一個,則溢位;
bool IsOverFlow(unsigned x, unsigned y)
{
   unsigned z = x + y;
   if(z < x)
      return true;
    return false;
}
(2) 有符號整數相加,比無符號的相對複雜一點兒:
如果兩個整數相加<0,或者兩個負數相加>0,(負數在計算機中用補碼錶示)則溢位。
bool IsOverFlow(int x, int y)
{
   int z = x + y;
   if(x > 0 && y > 0 && z < 0)
      return true;  
   if(x < 0 && y <  0 && z > 0)
      return true;
    return false;
}
(3)如何判斷一個輸入或者轉化轉化的單個數字是否溢位;
if( num>0x7fffffff || num<(signed int)0x80000000)
int型別的最大正數:0x7fffffff;
int型別的最小負數:0x80000000;

相關文章