C/C++的自動類型轉換

自動類型轉換規則:

1) 若參與運算量的類型不同,則先轉換成同一類型,然後進行運算。

2) 轉換按數據長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉成long型後再進行運算。

1.若兩種類型的字節數不同,轉換成字節數高的類型;

2.若兩種類型的字節數相同,且一種有符號,一種無符號,則轉換成無符號類型;

3) 所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉換成double型,再作運算。

4) char型和short型參與運算時,必須先轉換成int型。

5) 在賦值運算中,賦值號兩邊量的數據類型不同時,賦值號右邊量的類型將轉換爲左邊量的類型。如果右邊量的數據類型長度左邊長時,將丟失一部分數據,這樣會降低精度,丟失的部分按四捨五入向前舍入。

同一句語句或表達式如果使用了多種類型的變量和常量(類型混用),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。使用函數原型可以避免這種自動升級。

這裏寫代碼片#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[])
{

    int a = -6 ;
    unsigned int b = 5 ;
    if(a + b > 0)
    {
        printf("%u > %d\n", a, b);
    }else 
    {
        printf("%u < %d\n", a, b);
    }
        /*
    int val1, val2 ;
    while(scanf("%d%d", &val1, &val2) == 2)
    {
        printf("%d/%d = %d\n", val1, val2, val1/val2);
    }
    */
    system("pause");
    return 0 ;
}

隱式轉換
隱式類型轉換分三種,即算術轉換、賦值轉換和輸出轉換。
1.算術轉換
進行算術運算(加、減、乘、除、取餘以及符號運算)時,不同類型數招必須轉換成同一類型的數據才能運算,算術轉換原則爲:
在進行運算時,以表達式中最長類型爲主,將其他類型位據均轉換成該類型,如:
(1)若運算數中有double型或float型,則其他類型數據均轉換成double類型進行運算。
(2)若運算數中最長的類型爲long型.則其他類型數均轉換成long型數。
(3)若運算數中最長類型爲int型,則char型也轉換成int型進行運算。算術轉換是在運算過程中自動完成的。
2.賦值轉換
進行賦值操作時,賦值運算符右邊的數據類型必須轉換成賦值號左邊的類型,若右邊的數據類型的長度大於左邊,則要進行截斷或舍入操作。
3.輸出轉換
在程序中將數據用printf函數以指定格式輸出時,當要輸出的鹽據類型與輸出格式不符時,便自動進行類型轉換,如一個long型數據用整型格式(%d)輸出時,則相當於將long型轉換成整型(int)數據輸出;一個字符(char)型數據用整型格式輸出時,相當於將char型轉換成int型輸出。
注:較長型數據轉換成短型數據輸出時,其值不能超出短型數據允許的值範圍,否則轉換時將出錯。

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