C++中數據類型

1、C++中數據類型字節數和機器字長關係                                       

(轉自:http://www.cnblogs.com/dkxsj/archive/2011/11/25/2263347.html)


機器字長:是指計算機進行一次整數運算所能處理的二進制數據的位數(整數運算即定點整數運算)。機器字長也就是運算器進行定點數運算的字長,通常也是CPU內部數據通路的寬度。現在一般爲32位即4個字節,也有64位和16位的。

     算術類型的存儲空間按照機器而定。一般,short類型爲半個機器字長,int爲一個機器字長,long爲1或2個機器字長,float爲一個機器字長,double爲兩個字,long double用3或4個字長。C++標準規定的是每個算術類型的最小存儲空間,但其並不阻止編譯器用更大的存儲空間。如果要保證移植性,儘量用__int16 __int32 __int64吧,或者自己typedef int INT32一下。

數據類型名稱 字節數 別名 取值範圍
int * signed,signed int 操作系統決定,即與操作系統的"字長"有關(在vc++下int是4字節,32位。)
unsigned int * unsigned 由操作系統決定,即與操作系統的"字長"有關
__int8 1 char,signed char –128 到 127
__int16 2 short,short int,signed short int –32,768 到 32,767
__int32 4 signed,signed int –2,147,483,648 到 2,147,483,647
__int64 8 –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
bool 1 false 或 true
char 1 signed char –128 到 127
unsigned char 1 0 到 255
short 2 short int,signed short int –32,768 到 32,767
unsigned short 2 unsigned short int 0 到 65,535
long 4 long int,signed long int –2,147,483,648 到 2,147,483,647
long long 8 none (but equivalent to __int64) –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long 4 unsigned long int 0 到 4,294,967,295
enum * 由操作系統決定,即與操作系統的"字長"有關
float 4 3.4E +/- 38 (7 digits)
double 8 1.7E +/- 308 (15 digits)
long double 8 1.7E +/- 308 (15 digits)
wchar_t 2 __wchar_t 0 到 65,535

(P:指針的大小爲定值4個字節)


2、設計程序時選用選用數據類型

(1)計算像 vector 或數組這種數據結構的元素個數時,使用標準庫定義的類型來統計對象的大小總是正確的。其他情況下,使用 unsigned 類型比較明智,可以避免值越界導致結果爲負數的可能性;

(2)當執行整型算術運算時,很少使用 short 類型,因爲會隱含賦值越界的錯誤;char 類型通常用來存儲字符而不用於計算,因爲char有時會當成是signed或unsigned;

(3)一般int 和 long 都是32位。對某些是用32位表示int,用64位表示long的機器,要用哪個進行運算要根據實際運行性能的代價來選擇;

(4)浮點型用double就基本沒錯。(float可能有隱式精度損失,long double通常沒必要用這樣的精度)


3、float 與 double

float: 1位符號位(s)、8位指數(e),23位尾數(m,共32位)
double: 1位符號位(s)、11位指數(e),52位尾數(m,共64位)

C++標準中,float 型只能保證 6 位有效數字,double 型至少保證 10 位有效數字。至於具體顯示小數點後幾位,看編譯器設置。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章