自動檢測溢出的unsigned int加法

int uadd_ok(unsigned int a, unsigned int b)
{
    int result =a+b;
        if(result>a)
        {
            printf("the add is ok\n");
        }
        else 
        {
            printf("the add is overflow\n");
        }
        return result;
}

原理:對於無符號整數而言,兩個取值範圍爲02w1 之間的整數相加得到取值範圍爲02w12w2w+12 對於第一個範圍內的數值,加法沒有溢出,表示的數值範圍任然在w位內可以表示,那麼a+b>a是肯定的
對於得到的result在2w2w+12 , 那麼在w+1位上會有數值1,存儲的時候,自動把w+1位上的1截斷掉,那麼得來的數值就等於 result=a+b2w ,發生了溢出。由於b<2w ,所以 b2w<0 , 因此判斷溢出可以通過 result<ab 來判斷

發佈了46 篇原創文章 · 獲贊 10 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章