淺談unsigned int與int相加的問題

當unsigned int 和int相加時,計算過程中會強制提升(轉化)爲 unsigned int進行計算,表達式的類型也爲unsigned int。

 

int main()  
{  
    int a = -30;  
    unsigned int b = 15;  
    int w = a+b;  
    if(a+b > 0){  
        printf("a+b>0\n");//輸出這句話
    }
    else  {
        printf("a+b<0\n"); 
    }
    
    if(w > 0)  {
        printf("w>0"); 
    }
    else  {
        printf("w<0\n");//輸出這句話
        system("pause");
    }
}  
其輸出結果爲:

第一句輸出原因:當int和unsigned in相加時,要將int轉化爲unsigned int,而int小於0,根據補碼原則(自行百度補碼),int強制轉換爲unsigned int,而int的最高位爲符號位,也就是1,轉換成unsigned int 後 由於unsigned int爲正數,所以會轉換成一個很大的正數,所以輸出結果大於0.

第二句輸出原因:a+b  也就是int+unsigned int,此時int會強制轉換爲unsigned int所以與上面同理會轉換爲一個很大的正數,而最後a+b被儲存在int w中

此時可以看作unsigned int被強制轉換爲int  此時unsigned int  a+b的最高位1不再表示大小,而是變成了int中的符號位代表正負,所以此時正常相加,

結果小於0.
https://blog.csdn.net/shaohuiyang/article/details/77606651

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章