C語言中類型的自動轉換

來源:互聯網
上載者:User

同一句語句或運算式如果使用了多種類型的變數和常量(類型混用),C 會自動把它們轉換成同一種類型。以下是自動類型轉換的基本規則:

    1. 在運算式中,char 和 short 類型的值,無論有符號還是無符號,都會自動轉換成 int 或者 unsigned
int(如果 short 的大小和 int 一樣,unsigned short 的表示範圍就大於 int,在這種情況下,unsigned
short 被轉換成 unsigned int)。因為它們被轉換成表示範圍更大的類型,故而把這種轉換稱為“升級(promotion)”。

    2. 按照從高到低的順序給各種資料類型分等級,依次為:long double, double, float, unsigned
long long, long long, unsigned long, long, unsigned int 和
int。這裡有一個小小的例外,如果 long 和 int 大小相同,則 unsigned int 的等級應位於 long 之上。char 和
short 並沒有出現於這個等級列表,是因為它們應該已經被升級成了 int 或者 unsigned int。

    3. 在任何涉及兩種資料類型的操作中,它們之間等級較低的類型會被轉換成等級較高的類型。

    4. 在指派陳述式中,= 右邊的值在賦予 =
左邊的變數之前,首先要將右邊的值的資料類型轉換成左邊變數的類型。也就是說,左邊變數是什麼資料類型,右邊的值就要轉換成什麼資料類型的值。這個過程可
能導致右邊的值的類型升級,也可能導致其類型降級(demotion)。所謂“降級”,是指等級較高的類型被轉換成等級較低的類型。

    5. 作為參數傳遞給函數時,char 和 short 會被轉換成 int,float 會被轉換成 double。使用函數原型可以避免這種自動升級。

 

32位機

int                         4        -2^31 ~~(2^31-1)

unsigned int       4        0~~(2^32-1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.