c語言中資料型別的自動轉換原則

MyLinChi發表於2016-10-12

由低階向高階轉換的原則


最近幾天參加一公司招聘,其中有一道筆試題是這樣的:

如下程式的輸出結果是?

#include<stdio.h>
int main()
{
	unsigned int a=6;
	int b=-20;
	(a+b>6)?printf(">6"):printf("<=6");
	system("pause");
	return 0;
}
正確答案是:

至於原因就是上面所講的規則,b先變為unsigned型。學過計算機基礎的都知道,負數是以補碼的形式存在計算機中的,所以int 型的b在記憶體中的值為0xffffffec(vc6.0中int型為32位),化為十進位制數即為4294967276,a+b=4294967276+6=4294967282

在實際除錯中也是這個值

從這個意義來說,無符號數的運算優先順序要高於有符號數,式子中如果有unsigned型,則所有變數都要先變為unsigned型再運算。

補充一點,c語言在下面幾種情況都發生自動型別轉換:

      1、算術運算式中,低型別能夠轉換為高型別。
      2、賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值給他。
      3、函式呼叫中引數傳遞時,系統隱式地將實參轉換為形參的型別後,賦給形參。
      4、函式有返回值時,系統將隱式地將返回表示式型別轉換為返回值型別,賦值給呼叫函式。

相關文章