一、在算數表示式中,低型別轉換為高型別
signed char a = 0xe0;
unsigned int b = a;
unsigned char c = a;
同等位數的型別進行賦值時,不會改變在其記憶體的儲存形式,所以第三行語句 c 的位儲存形式還是0xe0
位擴充套件:當 a 和 c 進行比較的時候,由於兩邊都是char(位寬比int小的)型,所以要提公升為 int 型;如果原始型別為 signed 進行符號位擴充套件,如果原始型別為 unsigned 要進行零擴充套件。
例如: a 為 signed 型:0xe0 => 0x f f f f f f e0,
c 為unsigned型:0xe0=>0x000000e0
二、 賦值表示式中,右邊表示式的值會自動隱身轉化為左邊變數的型別;如果右
邊的精度大於左邊可能會丟失一部分資料(按四捨五入進行取捨)
三、函式呼叫的引數傳遞:系統自動把實參型別轉換為形參的型別,然後賦值給形
參;如果函式有返回值,系統又自動將返回表示式的型別轉換為返回值型別,
賦值給呼叫引數;另外如果return的型別和函式返回值的型別不一致,則以函
數的返回值型別為標準。函式的型別決定返回值的型別。
在運算表示式中:
shotr / char / unsigned char / unsigned short–>int–>unsigned int–>long–>unsigned long–>doublefloat
如果在表示式中既存在有符號型別也存在無符號型別,則所有的運算元轉換為無符號的型別;某種意義上,無符號的優先順序要高於有符號。
unsigned
int a =20;
signed
int b =-20
;printf
("%u\n"
, b);if
(a > b)
else
b 和 a 比較的時候系統自動將 b 轉換為無符號的乙個特大的數,所以 b 大於 a ;
強制型別轉換:
int a = 10;
int b = 5;
double c = (double)a / b;
printf("%f", c);
//結果為2.000000
注意事項:在使用強制型別轉換的時候必須要加括號,另外強制型別轉換和自動轉換都是對資料進行臨時的轉換,不改變資料在定義時的型別。 c語言型別轉換
c語言型別轉換 自動型別轉換 預設型別轉換,隱式轉換,編譯器幫你完成 和 強制型別轉換 自己轉成自己想要的型別 自動型別轉換最常見的有 混合運算 賦值運算 和函式值的型別轉換 賦值運算 就是把 右邊的表示式的型別 轉換成 左邊 的表示式的型別。混合運算 指在乙個表示式中參與運算的物件不是同一種資料型...
c語言 型別轉換
關於資料型別的相關轉換,我們可以總結出三種情況。下面我們就來詳細的說一下具體情況和相關例題吧 說到資料型別轉換我們首先要說說相關資料型別。double 8位元組 longlong 8位元組 float 4位元組 long 4位元組 int 4位元組 short 2位元組 char 1位元組 以上型別...
C語言 型別轉換
目錄 自動型別轉換 1.整形 2.浮點型 3.賦值 強制型別轉換 乙個表示式 現不同型別間的混合運算,較低的型別會自動向較高的型別轉換。一般情況下,資料表示的範圍越大,精度越高,級別越高。運算過後,型別保留,高位丟棄,只取 型別位元組大小的 低位。自動型別轉換順序 signed char unsig...