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語言資料型別
- Java資料型別自動轉換(++ ,+=)Java資料型別
- JS資料型別轉換規則JS資料型別
- java基本資料型別與自動轉換Java資料型別
- 二進位制安全_C語言中資料型別C語言資料型別
- go語言資料型別轉換Go資料型別
- C語言中的複雜資料型別,你掌握了哪些?C語言資料型別
- C語言的隱式型別轉換C語言型別
- 資料型別,型別轉換資料型別
- C++ 動態型別轉換C++型別
- C# 泛型中的資料型別判定與轉換C#泛型資料型別
- 資料型別轉換資料型別
- c語言中陣列的三種型別C語言陣列型別
- C#資料型別及其轉換詳解C#資料型別
- python語言中基本資料型別有哪些?Python資料型別
- 自學java筆記I 基本型別+轉義字元+資料型別的轉換Java筆記字元資料型別
- JS資料型別的轉換JS資料型別
- Java資料型別及型別轉換Java資料型別
- java 基本型別的轉換規則Java型別
- JavaScript 資料型別轉換JavaScript資料型別
- javascript資料型別轉換JavaScript資料型別
- 【Java】資料型別轉換Java資料型別
- 資料型別及轉換資料型別
- 3. php資料型別、資料型別轉換PHP資料型別
- c++ 型別轉換C++型別
- C# 型別轉換C#型別
- JS裡的資料型別轉換JS資料型別
- JS 裡的資料型別轉換JS資料型別
- C# 左移右移在資料型別轉換中的使用C#資料型別
- GO語言中string和[]byte的區別及轉換Go
- C語言資料型別C語言資料型別
- 對C語言中無符號型別的建議C語言符號型別
- c語言中預設引數的兩種型別C語言型別
- JS中資料型別轉換JS資料型別
- 2、java資料型別轉換Java資料型別
- JavaScript 基本資料型別轉換JavaScript資料型別
- C語言資料型別、變數的輸入和輸出、進位制轉換C語言資料型別變數