short與long兩個限定符的引入可以為我們提供滿足實際需要的不同長度的整形數。int通常代表特定機器中證書的自然長度。short型別通常為16位,long型別通常為32位,int型別可以為16位或32位。各編譯器可以根據硬體特性自主選擇合適的型別長度,但要遵循下列限制:short與int型別至少為16位,long型別至少為32位,並且short型別不得長於int型別,而int型別不得長於long型別。
下面一段話選自《c++ primer》:
short、int和long型別都表示整型值,儲存空間的大小不同。一般,short型別為半個機器字長(word)長,int型別為乙個機器字長,而long型別為乙個或兩個機器字長(在32位機器中int型別和long型別通常字長是相同的)。
型別
16位系統/位元組
32位系統/位元組
64位系統/位元組
char
1
1
1
char*
2
4
8
short
2
2
2
int
2
4
4
long
4
4
8
long long
8
8
8
資料型別
說明32位位元組數
64位位元組數
取值範圍
bool
布林型1
1true,false
char
字元型1
1-128~127
unsigned char
無符號字元型11
0~255
short
短整型2
2-32768~32767
unsigned short
無符號短整型22
0~65535
int整型44
-2147483648~2147483647
unsigned int
無符號整型44
0~4294967295
long
長整型48–
unsigned long
無符號長整型48
–long long
長整型8
8-2^64~2^64-1
float
單精度浮點數
4
4
範圍-2^128~2^128
精度為6~7位有效數字
double
雙精度浮點數
8
8
範圍-2^1024~2^1024
精度為15~16位
long double
擴充套件精度浮點數88
範圍-2^1024~2^1024
精度為15~16位*位址
48– 2的:
8次方:256
16次方:65536
32次方:4 294 967 296
從表中可以看出這麼幾個問題,int型別在64位系統下竟然是4個位元組32位的。還有,這些玩意兒到底跟什麼有關係?是誰在控制著?從網上扒了各種解釋,大概有這麼兩點:
1、64位系統下,編譯器為了向前相容,將int型別自動編譯為4個位元組的了;
2、這些個玩意兒就是編譯器來控制的,不同的編譯器將int型別編譯成不同長度的,所以,使用什麼編譯器才是重要的,比如:32位系統,tc下的int就是16位長度的,vc就是32位長度的。
3、long long是標準的8 bytes,不受編譯器限制,所以,16位的依然也是8 bytes。(多謝博友0_0i_i 的指正)
通過上面的介紹,應該大致明白整型的定義了吧,所以我們在使用整型變數的時候還是得小心的,尤其需要其所佔空間長度的時候,千萬不要想當然的認為int在32位系統下就是4個位元組。盡量使用sizeof取值。
C 資料型別和位元組長度
bool system.boolean 布林型,其值為 true 或者 false byte system.byte 位元組型,佔 1 位元組,表示 8 位正整數,範圍 0 255 sbyte system.sbyte 帶符號位元組型,佔 1 位元組,表示 8 位整數,範圍 128 127 char...
資料型別位元組長度表
資料型別名稱 位元組數 別名 取值範圍 int signed,signed int 由作業系統 決定,即與作業系統的 字長 有關 unsigned int unsigned 由作業系統決定,即與作業系統的 字長 有關 int8 1char,signed char 128 到 127 int16 2s...
c語言之資料型別長度
c語言之資料型別長度 分享 2011 05 30 20 57 青雲清 瀏覽 219072 次 急2011 05 30 21 04 提問者採納 不要誤人子弟啊 搞清楚再貼出來 追問 那你的答案是啥呢?追答 16位 2,4,4,8,1 32位4,4,4,8,1 二 資料型別對應位元組數 程式執行平台 不...