1. 程式人生 > >C/C++: short , int , long , long long資料型別選用

C/C++: short , int , long , long long資料型別選用

C/C++: short , int , long , long long資料型別選用

標籤: C/C++ 資料型別

by 小威威

在C++中,編譯器對int型別資料的執行效率最高。一般在符合int條件的情況下優先選擇int
那麼,選擇資料型別的條件是什麼呢?
我認為,大於30000的數字應當使用long型別,超過20億的數字應當使用long long型別。原因如下:

32位的系統中:
`short`與`int`佔兩個位元組, `long` 佔四個位元組, `long long` 佔八個位元組;
在64位的系統中:
`short`佔兩個位元組, `int` `long` 佔四個位元組, `l
ong long` 佔八個位元組。

(注:2的16次方 = 65536 ; 2的32次方 = 4294672296; 2的64位 = 18446744073709551616)

為什麼大於30000的數字應當用long型別呢?在64位系統中int型別佔四個位元組,是32位,不是足以儲存大於30000的部分數字的麼?

int a = 40000; 
long b = 40000;

這主要是考慮到程式碼的移植性問題。因為在64位系統中,int型別佔4個位元組,但在32位系統中,int型別佔2個位元組。也就是說,當我們把一個大於(65536/2)的數用int型別儲存,在64位系統上不會出現問題,但是將此程式在32位系統執行時資料就會超出範圍,導致結果錯誤。因此,為了確保程式碼移植性高,應將大於(65536/2)的數定義為long

型別。

同理,當數字大於(4294672296/2)時,應定義資料為long long 型別。

那麼,什麼時候用short型別呢?不是說一般優先考慮int型別麼?原因如下:

在32位系統中,定義一個short型別的陣列與一個int型別陣列,其儲存的資料在short的範圍以內。此時將程式碼放在64位系統執行,int型別陣列所佔用的記憶體大約是short型別陣列的兩倍。大大增加了記憶體的佔用。因此,在這種情況下,還是用short 型別陣列較為妥當。

總而言之,大於30000的資料用long型別儲存,大於20億的資料用 long long儲存。

以上內容皆為本人觀點,歡迎大家提出批評和指導,我們一起探討!