C语言基本数据类型数值范围一览
本文基于32位平台及IEEE 754标准
整型 (Integer Types)
| 类型 | 字节数 | 有符号/无符号 | 十进制科学计数法 | 2的幂表示法 | 备注 |
|---|---|---|---|---|---|
short |
2 | 有符号 | -3.28 × 10⁴ ~ 3.2767 × 10⁴ | (-2^{15}) ~ (2^{15}-1) | |
unsigned short |
2 | 无符号 | 0 ~ 6.5535 × 10⁴ | (0) ~ (2^{16}-1) | |
int |
4 | 有符号 | -2.147483648 × 10⁹ ~ 2.147483647 × 10⁹ | (-2^{31}) ~ (2^{31}-1) | |
unsigned int |
4 | 无符号 | 0 ~ 4.294967295 × 10⁹ | (0) ~ (2^{32}-1) | |
long |
4 或 8 | 有符号 | -2.147483648 × 10⁹ ~ 2.147483647 × 10⁹ (32位) 或 -9.22 × 10¹⁸ ~ 9.22 × 10¹⁸ (64位) | (-2^{31}) ~ (2^{31}-1) (32位) 或 (-2^{63}) ~ (2^{63}-1) (64位) | 长度与平台相关 |
long long |
8 | 有符号 | -9.223372036854775808 × 10¹⁸ ~ 9.223372036854775807 × 10¹⁸ | (-2^{63}) ~ (2^{63}-1) | C99 标准引入 |
unsigned long long |
8 | 无符号 | 0 ~ 1.8446744073709551615 × 10¹⁹ | (0) ~ (2^{64}-1) | |
char |
1 | 有符号 | -1.28 × 10² ~ 1.27 × 10² | (-2^{7}) ~ (2^{7}-1) | 用于数值时 [-128, 127] |
unsigned char |
1 | 无符号 | 0 ~ 2.55 × 10² | (0) ~ (2^{8}-1) | 用于数值时 [0, 255] |
浮点型 (Floating-Point Types)
| 类型 | 字节数 | 标准 | 十进制科学计数法(绝对值范围) | 2的幂表示法(绝对值范围) | 有效位数 (十进制) |
|---|---|---|---|---|---|
float |
4 | IEEE 754 单精度 | 最大: 约 ±3.4 × 10³⁸ 最小正规格化: 约 ±1.175 × 10⁻³⁸ |
最大: 约 ±(2^{128}) 最小: 约 ±(2^{-126}) |
6-7 位 |
double |
8 | IEEE 754 双精度 | 最大: 约 ±1.8 × 10³⁰⁸ 最小正规格化: 约 ±2.225 × 10⁻³⁰⁸ |
最大: 约 ±(2^{1024}) 最小: 约 ±(2^{-1022}) |
15-16 位 |
long double |
10/12/16 | x86 扩展精度 (80位) 或 双精度 | 最大: 约 ±1.1 × 10⁴⁹³² 最小: 约 ±3.4 × 10⁻⁴⁹³² |
最大: 约 ±(2^{16384}) 最小: 约 ±(2^{-16382}) |
18-19 位 |
PS
为确保数据的严谨性,以下几点需要特别留意:
- 整型的“位宽”依赖性:上表中整型数据基于 ILP32 和 LP64 数据模型(目前最通用的模型)。如果是16位DOS环境(如 Turbo C),
int的范围是 -32768~32767 。 - 浮点型的非均匀分布:浮点数在数轴上不是均匀分布的。靠近0的地方精度高、间距小;靠近最大值的地方精度低、间距大。上表中的“最小正规格化数”是指精度能表达的最小值,而非绝对值的最小值(因为有非规格化数,可以表示更接近0的数,但会逐渐损失精度)。
long double的差异性:long double在不同平台上的实现差异较大。在 x86 架构上通常使用 80位(10字节)扩展精度;在 ARM 或 MSVC 编译器下,long double可能与double完全一致(即 64位)。
老是记不清各种数据类型的具体数值范围,所以发布本文以备查询。
特别说明: 由于本人实在太懒 为了适应AI辅助学习的新时代变局,本文由D指导生成。
不得不说现在AI是真的强啊。
至少比我强多了……
(;´д`)ゞ
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Roseau的博客!




