本文基于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

为确保数据的严谨性,以下几点需要特别留意:

  1. 整型的“位宽”依赖性:上表中整型数据基于 ILP32LP64 数据模型(目前最通用的模型)。如果是16位DOS环境(如 Turbo C),int 的范围是 -32768~32767
  2. 浮点型的非均匀分布:浮点数在数轴上不是均匀分布的。靠近0的地方精度高、间距小;靠近最大值的地方精度低、间距大。上表中的“最小正规格化数”是指精度能表达的最小值,而非绝对值的最小值(因为有非规格化数,可以表示更接近0的数,但会逐渐损失精度)。
  3. long double 的差异性long double 在不同平台上的实现差异较大。在 x86 架构上通常使用 80位(10字节)扩展精度;在 ARM 或 MSVC 编译器下,long double 可能与 double 完全一致(即 64位)。

老是记不清各种数据类型的具体数值范围,所以发布本文以备查询。

特别说明: 由于本人实在太懒 为了适应AI辅助学习的新时代变局,本文由D指导生成。

不得不说现在AI是真的强啊。

至少比我强多了……
(;´д`)ゞ