C 資料型別

2021-09-10 09:16:07 字數 4297 閱讀 2232

機器字長:是指計算機進行一次整數運算所能處理的二進位制資料的位數(整數運算即定點整數運算)。機器字長也就是運算器進行定點數運算的字長,通常也是cpu內部資料通路的寬度。現在一般為32位即4個位元組,也有64位和16位的。

算術型別的儲存空間按照機器而定。一般,short型別為半個機器字長,int為乙個機器字長,long為1或2個機器字長,float為乙個機器字長,double為兩個字,long double用3或4個字長。c++標準規定的是每個算術型別的最小儲存空間,但其並不阻止編譯器用更大的儲存空間。如果要保證移植性,盡量用__int16 __int32 __int64吧,或者自己typedef int int32一下。

資料型別名稱位元組數別名取值範圍

int*

signed,signed int

由作業系統決定,即與作業系統的"字長"有關

unsigned int*

unsigned

由作業系統決定,即與作業系統的"字長"有關

__int81

char,signed char

–128 到 127

__int162

short,short int,signed short int

–32,768 到 32,767

__int324

signed,signed int

–2,147,483,648 到 2,147,483,647

__int648

無–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

bool1

無false 或 true

char1

signed char

–128 到 127

unsigned char1

無0 到 255

short2

short int,signed short int

–32,768 到 32,767

unsigned short2

unsigned short int

0 到 65,535

long4

long int,signed long int

–2,147,483,648 到 2,147,483,647

long long8

none (but equivalent to __int64)

–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

unsigned long4

unsigned long int

0 到 4,294,967,295

enum*

無由作業系統決定,即與作業系統的"字長"有關

float4

無3.4e +/- 38 (7 digits)

double8

無1.7e +/- 308 (15 digits)

long double8

無1.7e +/- 308 (15 digits)

wchar_t2

__wchar_t

0 到 65,535

(p:指標的大小為定值4個位元組)

32位機器環境下結果如下:

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++特有的。

(5)除上表以外,c/c++都可以自定義列舉enum、聯合union和struct結構體型別。

(6)以上sizeof通過windows xp 32位平台測試,其中某些型別資料的位元組數和數值範圍由作業系統和編譯平台決定。比如16位機上,sizeof(int) = 2,而32位機上sizeof(int) = 4;32位機上sizeof(long) = 4,而64位機上sizeof(long) = 8。除此之外,注意64位機上的pointer佔8byte。

(7)void的字面意思是「無型別」,不能用來定義變數。void真正發揮的作用在於:<1> 對函式返回和函式引數的限定,例如自定義既不帶引數也無返回值的函式voidmyfunc(void);<2>定義無型別通用指標void *,指向任何型別的資料。

(8)標準c++庫及stl還提供了通用資料結構:字串類string;向量類模板vector;雙端佇列類模板deque;鍊錶類模板list;容器介面卡堆疊類stack(實現先進後出的操作);容器介面卡佇列類queue(實現先進先出的操作);集合類set;多重集合類multiset;對映類map;多重對映類multimap;位集合bitset;迭代器iterator (類似指標的功能,對容器的內容進行訪問)。

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

(10)關於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。

(11)在win32api及mfc中為了使型別名稱在語意上更明了,對以上基本型別進行了大量的typedef。例如windef.h中的byte,word,dword。

C 資料型別

一般來說,計算機要儲存和處理不同的資料型別,在c 中有基本的資料型別和使用者自定義資料型別以及引用型資料。我們先學習下基本的資料型別,也就是系統自帶的資料型別。每種資料型別都要佔據系統記憶體的一定空間,例如c 中的整數int 乙個整數佔4個位元組,也就是32位 計算機是用0和1二進位制來表示和處理資...

c 資料型別

型別可分為 值型別,引用型別 值型別 直接存放真正的資料,值型別都有固定的長度,值型別的變數都儲存在 堆疊 stack 上。作為值型別的變數,每個都有自己的資料,因此對乙個變數的操作不會影響其他變數。引用型別 儲存讀資料的記憶體位址的引用,位於受管制的堆 heap 上作為引用型別的變數可以引 用同一...

C 資料型別

bool system.boolean 1位元組 byte system.byte 1位元組無符號 sbyte system.sbyte 1位元組有符號 short system.int16 2位元組 ushort system.uint16 2位元組 int system.int32 4位元組 u...