long和int的區別

2021-08-04 06:47:35 字數 1454 閱讀 9125

突然間就想到了

long

和int

google

各種查詢,各種書籍:《

c++ primer

》、《c

程式語言》檢視,終於明白了一些。下面的話選自《

c程式語言》:

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型別通常字長是相同的)。

這時候我又想到了,不同的機器位下,這三個型別到底有什麼區別,

short

就不說了,從上面兩段介紹來說,

short

應該都是

16位了,那麼

int和

long

google 型別

16位系統/位元組

32位系統/位元組

64位系統/位元組

char 1

1 1char* 2

4 8short 2

2 2int 2

4 4long 4

4 8long long 8

8 8從表中可以看出這麼幾個問題,

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

取值。

long和int的區別

short與long兩個限定符的引入可以為我們提供滿足實際需要的不同長度的整形數。int通常代表特定機器中證書的自然長度。short型別通常為16位,long型別通常為32位,int型別可以為16位或32位。各編譯器可以根據硬體特性自主選擇合適的型別長度,但要遵循下列限制 short與int型別至少...

int 和 long 的區別

int 4個位元組,32位 unsigned int 0 4294967295 int 2147483648 2147483647 int32 4個位元組,32位 unsigned int32 0 4294967295 int32 2147483648 2147483647 long 4個位元組,3...

int 和 long的區別

資料模型決定了c語言中基本資料型別與資料寬度的對應關係。我們常用的32位模型稱為ilp32,而64位模型有三種 lp64 llp64和ilp64。在64位模型中,指標一定是64位的,但是int和long的寬度則在不同的資料型別中有不同的定義。如下表 datatype lp32 ilp32 llp64...