int 和 long int 的區別在哪裡?

sizeof(int) = sizeof(long int) ,並且取值的範圍一樣。

那麼int 和 long int 的區別在哪裡?


int和long的長度是看編譯器的,int至少2位元組,long不短於int,你說兩者相等只能說你的編譯器是這樣實現的


然而 R 大早已看透了一切:

軟體的平台移植? - RednaxelaFX 的回答

c++ faq - What does the C++ standard state the size of int, long type to be?

----


ILP32 下,long和int都是32位

LP64下,long是64位,int是32位

LLP64下,long和int是32位,long long是64位。

Linux下是LP64,Windows是LLP64.


沒經歷過 turbo c 年代的人啊

你用 TC 寫程序 int 就是比 long 短的

其實 char short int long 體系就是 16 位的時代建立的……


並且取值的範圍一樣。

可以不一樣。

C語言標準只是規定了這些類型的最小尺寸,並沒有規定它們應當多大。所以編譯器可以讓int和long一樣,也可以讓它們不一樣。


它們在不同平台上的長度是可能不一樣的,但必須遵循「int 至少 16 位,long int 至少 32 位,並且 sizeof(int) &<= sizeof(long)」的規則。

這就類似,你覺得「愛人」和「妻子」不可能有區別,但是在日語里,這兩個確實有天壤之別。


原來32bit和x64上long int和int一樣長啊啊啊啊啊啊啊啊


區別在於長整型所佔的存儲空間是≥整形所佔的存儲空間的,這意味著長整形所能夠表示的數字範圍是要遠遠大於(或者等於)整形能夠表示的數字範圍的。

拍自翁惠玉老師編著的《c++程序設計思想與方法》

可以看到,在visualC++中,Int和Long Int都佔有4byte的空間,1byte=8bit,4byte=32bit,所以在visualC++中整形和長整型都是由32個0或者1組成的,故而表示範圍是-2^31——2^31-1,減一是因為還要表示0。

下面,我來編幾個小程序來驗證一下上面說的。

我用CodeBlocks編程,如上圖,得出整型與長整型所佔的系統內存,均為4byte。

然後我想驗證一下數據的溢出......

可以看到,編譯的時候對line7提出警告,警告是什麼呢?overflow,溢出,對第6行的2^31-1卻沒有提出警告。

在此,我們驗證了在均佔4位元組內存的情況下,整型和長整型所能表示的最大數為2^31-1。

至於下限的驗證,方法一樣,就不再驗證了。

然後回到最初的問題,區別在哪裡?

區別就在於並不是在所有的機器上長整型和整型所佔內存都是一樣的,可能在有的機器上整型佔4位元組,長整型佔8位元組,那麼長整型所能表示的數字範圍就是-2^63----2^63-1了。

那麼該如何運用呢(假設整形佔4位元組,長整型佔8位元組)?

如果題主在使用一個整數變數的時候,在這個變數的生命周期內,其範圍在[-2^31,2^31-1]之間,那麼就可以用整型,否則,就要用長整型。如果這個數極大,已經超出了長整型的表示範圍,題主就要自己寫一個class了。

如果整型和長整型佔有空間一樣,表示範圍也一樣的話,那麼,區別就在於..........

你在定義長整型變數的時候要多打一個long 。


鑽研管鑽研,stdint.h用起來


sizeof(int) ≥ sizeof(short)

sizeof(long) ≥ sizeof(int)

sizeof(long) &> sizeof(short)


long int位數不低於 int,sizeof(long int) &>= sizeof(int)


64-bit data models: 64-bit computing

看著大家的答案都不大靠譜,有點看不過去了,詳細可以看看 Wikipedia 的這個詞條,整理的表格比較細緻

簡單的話,可以看 @姚飛 的答案 [int 和 long int 的區別在哪裡? - 姚飛的回答]。


推薦閱讀:

VR需要掌握什麼編程語言?
有哪些比較好的關於編譯原理 ,操作系統的網路公開課?
精通機器學習為什麼同時也必須精通一門編程語言?
C++11 中為什麼是auto,而不是var?
為什麼大家都很否定中文編程?

TAG:編程語言 | C編程語言 | C | CC | 浮點運算 |