資料型別轉換

2021-07-07 09:34:44 字數 1435 閱讀 7823

常用的資料型別有以下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型別...