32位與64位系統資料型別
不同的平台上對不同的資料型別分配的位元組數是不同的,一般的,資料型別的位元組數是由編輯器決定的(編譯期間決定資料型別長度)。
簡單來說,平台就是cpu+os+compiler,cpu的位是指一次性可處理的資料量是多少,1位元組=8位,32位處理器可以一次性處理4個位元組的資料量,依次類推。32位作業系統針對的32位的cpu設計。64位作業系統針對的64位的cpu設計。所以平台是三者的組合,它們的位元組長相同時,效率最高。
下面是32位系統與64位系統各資料型別對比:
資料型別
說明32位位元組數
64位位元組數
取值範圍
bool
布林型1
1true,false
char
字元型1
1-128~127
unsigned char
無符號字元型11
0~255
short
短整型2
2-32768~32767
unsigned short
無符號短整型22
0~65535
int整型44
-2147483648~2147483647
unsigned int
無符號整型44
0~4294967295
long
長整型48–
unsigned long
無符號長整型48
–long long
長整型8
8-2^64~2^64-1
float
單精度浮點數44
範圍-2^128~2^128
精度為6~7位有效數字
double
雙精度浮點數88
範圍-2^1024~2^1024
精度為15~16位
long double
擴充套件精度浮點數88
範圍-2^1024~2^1024
精度為15~16位*位址
48–
除了*與long隨作業系統子長變化而變化外,其他的都固定不變(32位和64位相比)
float與double的範圍和精度
範圍 float和double的範圍是由指數的位數來決定的。
float的指數字有8位,而double的指數字有11位,分布如下:
float:
1bit(符號位) 8bits(指數字) 23bits(尾數字)
double:
1bit(符號位) 11bits(指數字) 52bits(尾數字)
於是,float的指數範圍為-127~+128,而double的指數範圍為-1023~+1024,並且指數字是按補碼的形式來劃分的。
其中負指數決定了浮點數所能表達的絕對值最小的非零數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值範圍。
float的範圍為-2^128 ~ +2^128,也即-3.40e+38 ~ +3.40e+38;double的範圍為-2^1024 ~ +2^1024,也即-1.79e+308 ~ +1.79e+308。
精度 float和double的精度是由尾數的位數來決定的。浮點數在記憶體中是按科學計數法來儲存的,其整數部分始終是乙個隱含著的「1」,由於它是不變的,故不能對精度造成影響。
float:2^23 = 8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。
C 32位系統與64位系統基本資料型別
說明32位位元組數 64位位元組數 取值範圍 bool 布林型1 1true,false char 字元型1 1 128 127 unsigned char 無符號字元型11 0 255 short 短整型2 2 32768 32767 unsigned short 無符號短整型22 0 65535...
32位或64位基本資料型別大小
int型字長問題 c c 規定int字長和機器字長相同 作業系統字長和機器字長未必一致 編譯器根據作業系統字長來定義int字長 由上面三點可知,在一些沒有作業系統的嵌入式計算機系統上,int的長度與處理器字長一致 有操作 系統時,作業系統的字長與處理器的字長不一定一致,此時編譯器根據作業系統的字長來...
32位與64位系統基本資料型別的位元組數
32位與64位系統資料型別 不同的平台上對不同的資料型別分配的位元組數是不同的,一般的,資料型別的位元組數是由編輯器決定的 編譯期間決定資料型別長度 簡單來說,平台就是cpu os compiler,cpu的位是指一次性可處理的資料量是多少,1位元組 8位,32位處理器可以一次性處理4個位元組的資料...