常用的資料型別有以下7種(由所佔位元組數的從大到小排列):
double 8位元組
long long int 8位元組
float 4位元組
int 2/4位元組
short 2位元組
char 1位元組
同一種運算子,要求左右的資料型別一樣,資料型別轉換規則有以下三條:
1. 由窄的資料型別轉換為寬的資料型別。
2. short 與 cha r進行運算時,都必須提公升為int進行計算。
3. 對同一種資料型別來講,無符號的數比有符號的數「寬」,應轉成無符號的數進行計算。
一:從窄到寬:高位全部補符號位。
eg:char ch1 = 10 char 型別佔1個位元組, 其二進位制為:0000 1010
要將 ch1 轉成 int 型別,int 佔4個位元組,高位全部補符號位,其二進位制形式為:0000 0000 0000 0000 0000 0000 0000 1010,結果還是10。
eg:char ch2 = -1 char 型別佔1個位元組, 其二進位制為:1111 1111
要將 ch1 轉成 int 型別,int 佔4個位元組,高位全部補符號位,其二進位制形式為:1111 1111 1111 1111 1111 1111 1111 1111,結果還是-1.
因為pc是小端,低位址儲存低資料,因此當資料型別從寬到窄轉換時,高位資料截斷,保留低位資料。
eg:char ch = 1000;
printf("%x\n", ch);
程式結果為:e8
1000 的二進位制形式為: 0000 0000 0000 0000 0000 0011 1110 1000
它的低位資料為 1110 1000,轉換成16進製制是e8,與程式結果一致。
程式例項:
程式執行結果如上圖所示,現進行分析總結:
a 的資料型別為 unsigned short ,-1的資料型別為 signed int ,兩者進行比較時 a 需要轉換為 signed int 的資料型別,這是由窄到寬的資料型別轉換,高位補符號位,即補0, 因此 a 轉換後結果還是 10 。10 > -1,所以結果為a > -1 。
b 的資料型別為unsigned int,-1的資料型別為 signed int ,因為同一型別中無符號數要寬於有符號數,因此兩者進行比較時 -1 需要轉換為 signed int 的資料型別,需要高位補符符號位,即補1, 因此 -1 轉換後結果還是個很大的正整數 ,所以結果為b < -1 。
資料型別 型別轉換
這樣的語句將報錯,因為char型別精度低於int型別,編譯器無法將其自動轉換,只能進行強制轉換 int x 65 char ch char x 舉例1 int age 19 char 女 char result age int 不可以自動轉換成char 精度損失 舉例2 int a 10 int b...
Objective C資料型別 資料型別轉換
資料型別 1.objective c資料型別可以分為 基本資料型別 物件資料型別和id型別。2.基本資料型別有 int float double和char型別。3.物件型別就是類或協議所宣告的指標型別,例如 nsautoreleasepool pool 其中,nsautoreleasepool是乙個...
資料型別轉換
資料型別轉換 public class typeconvert 一 容量小的資料型別自動轉換為容量大的資料型別 資料型別按容量大小排序為 byte,short,char int long float double byte,short,char之間不會互相轉換,他們三者在計算時首先回轉換為int型別...