文章目錄
- 不同位數的系統下各個類型所占字節數
- 如何存儲的
我發現我能搜到的相關文章都只講了這些數據類型的范圍是這樣的,不說實際的存儲情況,當你了解了類型實際是如何存儲的,再去記憶這些范圍就簡單了,所以就有了這篇文章
不同位數的系統下各個類型所占字節數
數據類型 | 32 位系統(字節) | 64 位系統(字節) |
---|---|---|
bool | 1 | 1 |
char | 1 | 1 |
signed char | 1 | 1 |
unsigned char | 1 | 1 |
short | 2 | 2 |
unsigned short | 2 | 2 |
int | 4 | 4 |
unsigned int | 4 | 4 |
long | 4 | 8 |
unsigned long | 4 | 8 |
long long | 8 | 8 |
unsigned long long | 8 | 8 |
float | 4 | 4 |
double | 8 | 8 |
long double | 8/12/16* | 8/16** |
指針類型(void*等) | 4 | 8 |
* long double 在 32 位系統中因編譯器不同可能為 8、12 或 16 字節(如 GCC 為 12 字節,Visual C++ 為 8 字節)
** 64 位系統中long double通常為 16 字節(GCC)或 8 字節(Visual C++)
如何存儲的
int
- 占4個字節(32位)
- 第1位是符號位
- 剩余 31 位用于表示數據
- 范圍:
- 最小值:-231(即 -2147483648)
- 最大值:231 - 1(即 2147483647)
float
(單精度浮點數,IEEE 754 標準)
- 占 4 字節(32 位),結構特殊:
- 第 1 位:符號位(0 正 1 負)
- 中間 8 位:指數位(范圍 -126 到 127,偏移量 127)
- 最后 23 位:尾數位(隱含整數位 1,實際精度 24 位)
- 范圍:
- 最小值(正數):約 2-126(≈1.175×10^-38)
- 最大值(正數):約 (2-2-23)×2127(≈3.4×10^38)
double
(雙精度浮點數,IEEE 754 標準)
- 占 8 字節(64 位)
- 第 1 位:符號位
- 中間 11 位:指數位(范圍 -1022 到 1023,偏移量 1023)
- 最后 52 位:尾數位(隱含整數位 1,實際精度 53 位)
- 范圍:
- 最小值(正數):約 2-1022(≈2.2×10-308)
- 最大值(正數):約 (2-2-52)×21023(≈1.8×10308)
bool
- 占 1 個字節 (8 位)
- 只保存 true(1) 或 false(0),具體實現依賴編譯器
- 范圍:
- 最小值:false (0)
- 最大值:true (1)
short
- 占2個字節(16位)
- 第1位是符號位
- 剩余 15 位用于表示數據
- 范圍:
- 最小值:-215(即 -32768)
- 最大值:215 - 1(即 32767)
long
- 通常占 4 字節(32 位,部分系統為 8 字節)
- 以 4 字節為例:
- 第 1 位是符號位
- 剩余 31 位用于表示數據
- 范圍:
- 最小值:-231(即 -2147483648)
- 最大值:231 - 1(即 2147483647)
long long
- 通常占 8 字節(64 位)
- 第 1 位是符號位
- 剩余 63 位用于表示數據
- 范圍:
- 最小值:-2^63
- 最大值:2^63 - 1