📊 C 语言核心数据类型一览表
LeonardoFoxC 语言里这几个最核心的数据类型做个系统梳理。
在看表格之前,有一个非常关键的底层概念: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. 为什么隐式转换时 float 比 long 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. 字母后缀的秘密
在练习题里你看到了 100L 和 100LL,这是写代码时告诉编译器的“小纸条”:
100:编译器默认当成int处理。100L:显式指定它是long类型。100LL:显式指定它是long long类型。20.0:编译器默认当成double处理。如果想让它是float,必须写成20.0f。
喜欢这篇文章的人也看了
评论
匿名评论隐私政策




