C語言運算時的參數符號自動轉換

一個簡單的問題?C語言中int和unsigned int二者誰的數值範圍大?

提示一下,數值0在int中有+0和-0之分,unsigned int中0只有一個+0,所以unsigned int的數值範圍比int大。

有C語言運算代碼如下:

#include <stdio.h>

int main(int argc, char** argv) {
    int  val = -15;
    unsigned int value = 13;
    int sum = value +  val;
    printf("sum %d\n", sum);


    return 0;
}

上面的sum結果是多少?

這個問題的答案自己去想。

C語言運算式子中,若有不同類型的變量,則數值範圍小的變量會被自動轉換爲數值範圍大的變量的類型。

所以C語言的轉換規則即爲:

1 char、short等變量會自動升級爲int類型變量

2 unsigned char 、unsigned short變量會自動升級爲unsigned int類型變量

3 有unsigned 和 signed 類型變量,則數值範圍小的變量的類型會被升級爲數值範圍大的變量的類型。

由上面第三規則,上面代碼中val的運算時類型爲unsigned int。

其他的很多所謂的規則,自己很容易套用第三規則去推導。


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