📊 C 语言核心数据类型一览表

C 语言里这几个最核心的数据类型做个系统梳理。

在看表格之前,有一个非常关键的底层概念:C 语言标准并没有绝对死规定每个类型必须是多少字节,而是规定了一个“大小相对顺序”。在目前主流的 64 位系统环境(如你常用的 GCC 或 Visual Studio 默认配置)下,它们的表现如下:

📊 C 语言核心数据类型一览表

数据类型 关键字 占用字节数 (64位) 典型取值范围
字符型 char 1 字节 -128 到 127
短整型 short 2 字节 -32768 到 32767
整型 int 4 字节 约 ±21 亿
长整型 long 4 或 8 字节 至少与 int 一样大
超长整型 long long 8 字节 约 ±9×10¹⁸
单精度浮点 float 4 字节 约 ±3.4×10³⁸ (6~7位有效数字)
双精度浮点 double 8 字节 约 ±1.7×10³⁰⁸ (15~16位有效数字)

🔍 补充核心细节(防坑指南)

1. 为什么隐式转换时 floatlong long 还要“大”?

在第一张笔记里,你看到了 long long < float < double

这时候你可能会纳闷:long long 占 8 字节,float 才占 4 字节,凭什么 4 字节的反而比 8 字节的“大”?

  • 原因在于“取值范围”,而不是“内存大小”
  • long long 能表示的最大整数是 $2^{63}-1 \approx 9 \times 10^{18}$。
  • float 因为采用了科学计数法(指数存储),它的最大值可以达到 $10^{38}$,远远超出了 long long 的范围。
  • 隐式类型转换的逻辑是向“能容纳更大范围”的方向提升,为了防止数据直接放不下,所以 long long 碰到 float 会自动转成 float

2. 字母后缀的秘密

在练习题里你看到了 100L100LL,这是写代码时告诉编译器的“小纸条”:

  • 100:编译器默认当成 int 处理。
  • 100L:显式指定它是 long 类型。
  • 100LL:显式指定它是 long long 类型。
  • 20.0:编译器默认当成 double 处理。如果想让它是 float,必须写成 20.0f