天天看點

long和int的差別

突然間就想到了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 1
char* 2 4 8
short 2 2 2
int 2 4 4
long 4 4 8
longlong 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取值。

繼續閱讀