C語言的整形提升

來源:互聯網
上載者:User

標籤:

1、算術轉換

  許多運算子都會引發轉換,以類似的方式產生結果類型,這個模式稱為“尋常算術轉換”。

  首先,任何類型為char或short的運算元被轉換為int,任何類型為float的運算元被轉換為double。其次,如果其中一個運算元類型為double,那麼另一個運算元被轉換為double,計算結果類型也是double。再次,如果其中一個運算元類型為long,那麼另一個運算元被轉換為long,計算結果類型也為long。或者,其中一個運算元的類型數unsigned,那麼另一個運算元被轉換為unsigned,計算結果類型也為unsigned。如果不符合上面幾種情況,那麼兩個運算元的類型都為int,計算結果類型也為int。

 

2、字元和整數

  char,short int或int型位段,包括它們的有符號或無符號變形,以及枚舉類型,可以使用在需要int或unsigned int的運算式中。如果int可以完整表示源類型的所有值,那麼該源類型的值就轉換為int,否則轉換為unsigned int。

 

3、尋常算術轉換

  許多運算元類型為算術類型的雙目運算子會引發轉換,並以類似的方式產生結果類型。它的目的是產生一個普遍類型,同時也是運算結果的類型。

  首先,如果其中一個運算元的類型是long double,那麼另一個運算元也會被轉換為long double。其次,如果其中一個運算元類型為double,那麼另一個運算元也被轉換為double。再次,如果其中一個運算元的類型為float,那麼另一個運算元也被轉換為float。否則,兩個運算元進行整形提升,執行下面的規則:如果其中一個運算元類型為unsigned long int,那麼另一個運算元也被轉換成unsigned long int。其次,如果其中一個運算元的類型是long int,而另一個運算元類型是unsigned int,如果long int能完整表示unsigned int的所有值,那麼unsigned int類型運算元被轉換為long int,如果long int 不能完整表示unsigned int的所有值,那麼兩個運算元都被轉換為unsigned long int。再次,如果其中一個運算元的類型是long int,那麼另一個運算元被轉換為long int。再再次,如果其中一個運算元的類型是unsigned int,那麼另一個運算元被轉換為unsigned int。如果所有以上情況都不屬於,那麼兩個運算元都為int。

  浮點運算元和浮點運算式的值可以用比類型本身所要求的更大的精度和更廣的範圍表示,而它的類型並不因此改變。

 

                                                                ——摘自《C專家編程》

C語言的整形提升

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.