c 內建型別

2021-06-19 13:59:27 字數 3722 閱讀 1107

**:

c++定義了一組表示整數、浮點數、單個字元和布林值的

算術型別

(arithmetic types),

另外還定義了一種稱為

void

的特殊型別。

void

型別沒有對應的值,僅用在有限的情況下。通常用作無返回值的函式的返回型別。

算術型別的儲存空間依機器而定。型別儲存空間是指用來表示該型別的位(bit)數。c++標準保證了每個算術型別的最小儲存空間,但它並不阻止編譯器使用更大的儲存空間。事實上,對於

int型別,幾乎所有的編譯器使用的儲存空間都比所要求的大。下表

列出了內建算術型別和其對應的最小儲存空間。

1. 整形

表示整數字元布林值的算術型別都看作整型。

字元型別有兩種:

char

wchar_t

。char

型別保證了有足夠的空間儲存機器基本字符集中任何字元相應的數值,因此,char型別通常是單個機器位元組(byte)。

wchar_t

型別用於擴充套件字符集,比如漢字和日語,這些字符集中的一些字元不能用單個

char

表示。

short、int和long型別都表示整型值,但具有不同大小的儲存空間。一般short型別為半個機器字長,int型別為乙個機器字長,而long型別為乙個或兩個機器字長(在32位機器中int型別和long型別通常字長是相同的)。

bool型別表示真值true和false。可以將算術型別的任何值賦給bool物件。0值算術型別代表false,任何非0的值都代表true。

1.1 帶符號和無符號型別

除bool型別外,整型可以是帶符號的(signed)也可以是無符號的(unsigned)。顧名思義,帶符號型別可以表示正數也可以表示負數(包括0),而無符號型只能表示大於或等於0的數。

整型int、short和long都預設為帶符號型。要獲得無符號型則必須指定該型別為unsigned,比如unsigned long。unsigned int型別可以簡寫為unsigned,也就是說,unsigned後不加其他型別識別符號意味著是unsigned int。

和其他整數型別不同,char有三種不同的型別:plain char、unsigned char和signed char。雖然char有三種不同的型別,但只有兩種表示方式。可以使用unsigned char或signed char表示char型別。使用哪種char表示方式由編譯器而定。

1.2 如何表示整數值

無符號型中,所有的位都表示數值。如果在特定的機器中,定義一種型別使用8位表示,那麼這種型別的unsigned型可以取值0到255。

c++標準並未定義signed型別如何用位來表示,而是由每個編譯器自由決定如何表示signed型別。這些表示方式會影響signed型別的取值範圍。可以確保8 位的signed型別取值至少從-127到127,也有許多實現允許取值從-128到127。

最常見的表示signed整數型別的策略是用其中乙個位作為符號位。符號位為1,值就為負數;符號位為0,值就為0或正數。乙個signed整數取值是從-128到127。

1.3 對整型賦值

物件的型別決定物件的取值。這會引起乙個疑問:當我們試著把乙個超出其取值範圍的值賦給乙個指定型別的物件時,結果會怎樣呢?答案取決於這種型別是

signed

還是unsigned。

對於

unsigned

型別來說,編譯器

必須調整越界值使其滿足要求。編譯器是通過取該值對

unsigned

型別可以取的不同值的數目求模後的值來實現的。比如8位的

unsigned char

,其取值範圍從0到

255(包括

255)。如果賦給超出這個範圍的值,那麼編譯器將會取該值對

256求模後的值。例如,我們可以試著將

336賦值給

8 位的

signed char

。如果試圖將

336儲存到8位的

unsigned char

中,實際賦值為

80,因為80是

336對

256求模後的值。

對於unsigned

型別來說,負數總是超出其取值範圍。

unsigned

型別的物件不可取負數,有些語言把負數賦給

unsigned

型別看成是非法的,但在

c++中是合法的。

c++中,把負值賦給

unsigned

物件是完全合法的,其結果是該負數對該型別的取值個數求模後的值。所以,如果把

-1賦給8位的

unsigned char

,那麼結果是255,因為255是

-1對256求模後的值。

當將超過取值範圍的值賦給

signed

型別時,由編譯器決定實際賦的值。在實際操作中,很多的編譯器處理

signed

型別和處理

unsigned

型別類似。也就是說,賦值時是取該值對該型別的取值個數求模後的值。然而我們不能保證編譯器都會這樣處理

signed

型別。2. 浮點型

型別float

、double

和long double

分別表示單精度浮點數雙精度浮點數擴充套件精度浮點數。一般

float

型別用乙個字

(32位

)來表示,

double

型別用兩個字

(64位

)來表示,

long double

型別用三個或四個字

(96或

128位

)來表示。型別的取值範圍決定了浮點數含有的有效數字位數。

型別 含

義 最小儲存空間

bool

布林型 na

char

字元型 8

位 wchar_t

寬字元型 16

位 short

短整型 16

位 int 整型

16位

續表 類

型 含義

最小儲存空間

long

長整型 32

位 float

單精度浮點型 6

位有效數

double

雙精度浮點型 10

位有效數

long double

擴充套件精度浮點型 10

位有效數

C 基本內建型別

算術型別 算術型別分為兩類 整型 integral type,包括字元和布林型別在內 和浮點型。算術型別的尺寸 也就是該型別資料所佔的位元數 在不同機器上有所差別。下表列出了c 標準規定的尺寸的最小值,同時允許編譯器賦予這些型別更大的尺寸。某一型別所佔的位元數不同,它所能表示的資料範圍也不一樣。c ...

C 內建型別轉換

toboolean 轉換為布林型。bool tobyte 轉換為位元組型別。byte tochar 如果可能的話,把型別轉換為單個 unicode 字元型別。char todatetime 把型別 整數或字串型別 轉換為 日期 時間 結構。datatime todecimal 把浮點型或整數型別轉換...

C 基本內建型別詳解

c 內建型別 c 定義了一套包括算術型別和空型別在內的基本資料型別。算數型別包括 字元型,整型,bool型,和浮點型。而至於空型別並沒有確定的具體的值,只是用於某些特殊的場合。比如當函式執行完的時不反悔任何數值,此時就需要乙個空型別老作為返回值 一 算數型別的劃分以及各型別所能表示的最大值或者表示範...