基本數據類型和類型處理

8種基本數據類型(32位系統)

byte char short int long float double boolean
1 1 2 4 4 4 8 1(字節)

舉例:

int a=0xFFFFFFF7;
char *p=(char*)&a;
  1. &a表示取a的地址,得到的指針類型應該是int *,然後將該指針類型強制轉換爲char *
  2. p++:此時移動的距離不爲4個字節,而是1個字節,*p*(char*)&a的輸出均爲0xFFFFFFF7,這裏是char類型的指針的轉換,而不是char類型的轉換。

強制類型轉換

a = 1.0f;
(int)&a; //表示將a的地址強制轉換爲十進制的整型,結果爲1245052;
(int&)a; //表示將a的引用強制轉換爲整型,a以float類型存儲在內存中,現在以int類型的方式去解釋這段內存;

在C++,float是用4個字節來存儲。其中有1位符號位,8位指數位和23位有效數字位。實際上有效數字位是24位,因爲第一位有效數字總是“1”,不必存儲。

SEEE EEEE    EMMM MMMM    MMMM MMMM    MMMM MMMM  
//S: 表示浮點數正負,1爲負數,0爲正數
//E: 指數加上127後的值的二進制數
//M: 24-bit的底數(只存儲23-bit)   

所以1.0f 在內存中的形式爲:

0011   1111   1000   0000   0000   0000   0000   0000

輸出的是 0x3f800000

0 在內存中的的存儲形式:

0000   0000   0000   0000   0000   0000   0000   0000

字符串和字符串字面值

1、字符串字面值實際上是由常亮字符構成的數組,編譯器在每個字符串結尾處都添加一個空字符(’\0’)。
2、如果兩個字符串字面值位置相鄰,並且由空格、縮進、換行符分隔,則他們實際上是一個整體。

std::cout<<"hello"
           "world";

類型別名

當類型名過於複雜時,可以自定義類型的別名以便於理解和使用。
(1)typedef

typedef double wages;   //wages是double的同義詞

(2)using(C++11)

using double = wages;   //將=左邊的名字規定爲=右邊的別名

auto類型說明符(C++11)

auto讓編譯器通過初始值來推斷變量的類型,因此auto定義的變量必須初始化。


decltype類型說明符(C++11)

返回操作數的數據類型,但是不實際計算表達式的值。例如:

decltype(f()) sum = x;
//用f()的返回類型作爲sum的類型,但是不調用f(),用x來初始化sum

如果decltype使用的表達式不是一個變量,那麼decltype返回表達式結果所對應的類型。

int i = 42, &r = i, *p = &i;
decltype(i) sum;    //返回int
decltype(r) sum;    //返回int&,必須初始化
decltype(*p) sum;   //返回int&,必須初始化
decltype((i)) sum;  //返回int&,必須初始化
發佈了52 篇原創文章 · 獲贊 10 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章