C/C++基本數據類型

學了C然後C++,然後MFC/Windows,然後是C#,其中數據類型很多,由基本類型衍生的typedef類型也N多。熟知基本數據類型是我們正確表達實際問題中各種數據的前提,因此我分類總結了一下C/C++/Windows /C#基本數據類型,以便日後查閱。

ANSI C/C++基本數據類型:

Type

Size

數值範圍

無值型void

0 byte

無值域

布爾型bool

1 byte

true   false

有符號短整型short [int] /signed short [int]

2 byte

-32768~32767

無符號短整型unsigned short [int]    

2 byte

0~65535

有符號整型int /signed [int]

4 byte

-2147483648~2147483647

無符號整型unsigned [int]

4 byte

0~4294967295

有符號長整型long [int]/signed long [int]

4 byte

-2147483648~2147483647

無符號長整型unsigned long [int]

4 byte

0~4294967295

long long

8 byte

0~18446744073709552000

有符號字符型char/signed char

1 byte

-128~127

無符號字符型unsigned char

1 byte

0~255

寬字符型wchar_t (unsigned short.)

2 byte

0~65535

單精度浮點型float

4 byte

-3.4E-38~3.4E+38

雙精度浮點型double

8 byte

1.7E-308~1.7E+308

long double

8 byte

 

 

說明:

(1)類型修飾符signed和unsigned用於修飾字符型和整形。

(2)類型修飾符short和long用於修飾字符型和整形。

(3)當用signed和unsigned、short和long修飾int整形時,int可省略。

(4)其中bool和wchar_t是C++特有的。對於條件判斷,零爲假,非零爲真,對bool變量可賦非0非1的其他真值。

(5)float的精度(6位有效數字)通常是不夠的,double類型可以保證10位有效數字,能夠滿足大多數計算的需要。使用double類型基本不會出錯,在float類型中存在隱式的精度損失。默認的浮點字面值常量爲double類型,在數值後面加上F或f表示單精度,例如3.14159F。浮點數float、double的存儲設計,從本質上來說是設計了一個數值映射,充分利用了二進制存儲的特點。參考IEEE754浮點數表示標準。

(6)除上表以外,C/C++都可以自定義枚舉enum、聯合union和struct結構體類型。

(7)以上sizeof通過Windows XP 32位平臺測試,其中某些類型數據的字節數和數值範圍由操作系統和編譯平臺決定。比如16位機上,sizeof(int) = 2,而32位機上sizeof(int) = 4;32位機上sizeof(long) = 4,而64位機上sizeof(long) = 8。除此之外,注意64位機上的pointer佔8byte。

(8)void的字面意思是“無類型”,不能用來定義變量。void真正發揮的作用在於:<1> 對函數返回和函數參數的限定,例如自定義既不帶參數也無返回值的函數void MyFunc(void);<2>定義無類型通用指針void *,指向任何類型的數據。

(9)標準C++庫及STL還提供了通用數據結構:字符串類string;向量類模板vector;雙端隊列類模板deque;鏈表類模板list;容器適配器堆棧類stack(實現先進後出的操作);容器適配器隊列類queue(實現先進先出的操作);集合類set;多重集合類multiset;映射類map;多重映射類multimap;位集合bitset;迭代器iterator (類似指針的功能,對容器的內容進行訪問)。

(10)在標準c++中,int的定義長度要依靠你的機器的字長,也就是說,如果你的機器是32位的,int的長度爲32位,如果你的機器是64位的,那麼int的標準長度就是64位,而vc中__int64是爲在32機位機器長實現64位長度的整形數。

(11)關於32位平臺下的int和long

long從字面上看,應該是64位才更合理,把long當成32位實在是一個歷史的包袱。像C#那樣新起爐竈的程序語言,由於沒有需要支持老代碼的問題,就把long當作64位來處理了。

在32位平臺下,long是相對short而言,long(short)類型是long(short) int類型的簡稱,sizeof(long) = sizeof(int) = 4。int和long的範圍雖然一樣,但輸入輸出格式不同,printf int的格式爲%d,而printf long的格式爲%ld。

考慮到程序的可移植性,還是要將他們區分開來。但當要求的數值範圍爲4byte時,建議使用int類型,因爲第一版的C語言只有一種內置類型,那就是int。

long類型的位數總是和機器的指針位數相等。

字面值整數常量的類型默認爲int或long,其精度類型取決於精度值,其值適合int型就是int型,比int型(INT_MAX)大的就是long類型。通過增加後綴可強制將字面值整數常量轉換成long、unsigned或unsigned long類型。通過在數值後面添加L或l(推薦使用L,防l與1混淆)指定常量爲long類型。例如128u,1L,1024UL,8Lu。沒有short類型的字面值常量。

(12)在Win32 API及MFC中爲了使類型名稱在語意上更明瞭,對以上基本類型進行了大量的typedef。例如WINDEF.H中的BYTE,WORD,DWORD。

(13)計算機內部內存的基本單位是1byte(8個電子開關)!

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