C++ 基本類型、變量

2章 變量和基本類型

2.1基本內置類型

C++基本數據類型:算術類型和空類型。其中算術類型包含字符、整型數、布爾值和浮點數。空類型不對應具體的值,常用作返回類型。

2.1.1 算術類型

算術類型分爲兩類:整型和浮點型
C++規定了算術類型尺寸(該類型數據所佔的比特數)的最小值,同時允許編譯器賦予更大的尺寸。
在這裏插入圖片描述
除去布爾類型和擴展的字符型外,其他整型可以花費爲signed和unsigned兩種。帶符號整型可表示負數,無符號整型只能表示>=0的值。其中,int short long 和long long默認都是帶符號的,加上unsigned就是無符號整型,unsigned int 可縮寫爲 unsigned。
如何選擇類型:

  • 明確數值不能爲負,應選用ungsigned
  • 整數運算時,short往往太小,而long和int一般有同樣的尺寸。因此如果數值超過int的表示範圍(-231 到 231-1),應選用long long
  • 執行浮點運算用double ,float可能會精度不夠,而double和float計算代價相差無幾。

2.1.2 類型轉換

Tips:C++中對象的含義是指 一塊能存儲數據並具有某種數據類型的內存空間,不只是類的對象,變量也可稱作對象。
當在程序的某處我們使用了一種類型而其實對象應該取另一種類型時,程序會自動類型轉換。

bool b = 42;				//b爲真
int i = b;					//i爲1
i = 3.14;					//自動轉換爲整型,i爲3
double pi = i;			//pi的值爲3.0
unsigned char c = -1;		//若char佔1字節 8bit,c的值爲255
signed char c2 = 256;		//假設char 佔8bit,c2的值是未定義的

自動類型轉換中,類型所能表示的值的範圍決定了轉換的過程:

  • 布爾值好說,取值:true或false,非0或0,0爲false,非0爲true。
  • 賦值運算右結合,以等號左邊的數據類型範圍爲準。當把一個浮點型賦值給整型,自動進行近似處理,結果爲整型能表示的精度。
  • 整數值賦給浮點型,小數部分記爲0.

當我們賦給無符號類型一個超出他表示範圍的值時,結果是初始值對無符號類型表示數值總數取模後的餘數。unsigned char佔 8bit,克表示0至255區間內的值,如果賦區間以外的值-1,結果是-1對256取模後所得的餘數。

而負數的取模運算,-1對256取模要先將-1加上256的整數倍轉換爲正數再取模,也就是(-1)%256 = (-1+256)%256=255%256=255

含有無符號類型的表達式
儘管不會故意給無符號類型賦值負數,但很容易寫出這樣的代碼。
當算術表達式中既有無符號數又有int型數據時,int型數據會轉換成無符號數。

unsigned u = 10;	//unsigned int 
int i = -42;
cout<<i+i<<endl;		//-84
cout<<u+i<<endl;	//如果int 佔4字節 32位 輸出4294967264

第一個cout常規操作,第二個要首先把int型轉換爲無符號數再運算。把負數轉換爲無符號數,其結果等於這個負數加上無符號數的模。
由於32位int表示範圍-231 到 231-1,無符號int取模是4294967296,加上負數42,再加10,結果爲4294967264

儘量不要混合使用帶符號類型和無符號類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章