C++基本数据类型的范围
文章目录
- 不同位数的系统下各个类型所占字节数
- 如何存储的
我发现我能搜到的相关文章都只讲了这些数据类型的范围是这样的,不说实际的存储情况,当你了解了类型实际是如何存储的,再去记忆这些范围就简单了,所以就有了这篇文章
不同位数的系统下各个类型所占字节数
数据类型 | 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