標籤:
原文地址:
http://blog.sina.com.cn/s/blog_6f62c9510101svjz.html#cmt_3221642
原文:
突然間就想到了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 |
long 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的區別