c語言中資料型別的自動轉換原則
由低階向高階轉換的原則
最近幾天參加一公司招聘,其中有一道筆試題是這樣的:
如下程式的輸出結果是?
#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、函式有返回值時,系統將隱式地將返回表示式型別轉換為返回值型別,賦值給呼叫函式。
相關文章
- C語言中資料型別的自動型別轉換C語言資料型別
- c語言中的資料型別的自動轉換原則C語言資料型別
- c語言運算過程中的型別自動轉換原則C語言型別
- C語言中資料型別轉換函式C語言資料型別函式
- C語言中的整數自動轉換原則C語言
- JS中資料型別轉換JS資料型別
- C語言的隱式型別轉換C語言型別
- 混合運算中資料型別的轉換 (轉)資料型別
- go語言資料型別轉換Go資料型別
- C語言型別轉換大學霸IT達人C語言型別
- C語言中,四則運算導致資料型別的轉換C語言資料型別
- PHP中資料型別轉換的三種方式PHP資料型別
- Java資料型別自動轉換(++ ,+=)Java資料型別
- php之資料型別自動轉換PHP資料型別
- C語言資料型別C語言資料型別
- c語言的基本資料型別C語言資料型別
- 二進位制安全_C語言中資料型別C語言資料型別
- 【揭祕】C語言型別轉換時發生了什麼?C語言型別
- java基本資料型別與自動轉換Java資料型別
- C語言(基本資料型別)C語言資料型別
- JS資料型別轉換規則JS資料型別
- 換個角度帶你學C語言的基本資料型別C語言資料型別
- Guru of the week:#19 自動型別轉換. (轉)型別
- 為啥-1大於1,-1乘3卻不等於-3?直到了解C語言自動轉換原則後...C語言
- c語言資料結構補齊原則C語言資料結構
- C語言 列舉資料型別C語言資料型別
- C++基本資料型別及型別轉換C++資料型別
- C中資料型別(Android之JNI)資料型別Android
- 概念區別 【編譯型語言與解釋型語言、動態型別語言與靜態型別語言、強型別語言與弱型別語言】編譯型別
- C++中的向上型別轉換和向下型別轉換C++型別
- java 基本型別的轉換規則Java型別
- SQL資料型別和C#資料型別間的轉換SQL資料型別C#
- PostgreSQL自定義自動型別轉換(CAST)SQL型別AST
- C語言-變數常量資料型別C語言變數資料型別
- C++型別轉換C++型別
- Java 語言是強型別語言語言(轉)Java型別
- C語言(共用體型別)C語言型別
- C 語言結構體的對齊原則結構體