在 C/C++ 编程中,选择合适的数据类型不仅影响 内存占用 ,还关系到 效率与精度 。本文系统总结了常见数据类型的 字节大小、位数、取值范围、适用场景和注意事项,帮助大家写出更高质量的代码。
1. int
-
字节数:4 字节(32 位)。
-
范围:
-
十进制:
-2,147,483,648 ~ 2,147,483,647
-
幂次方:
-2^31 ~ 2^31 - 1
-
-
适用场景:循环计数、数组下标、绝大多数整数运算。
-
注意 :超过 ±2^31 时请改用
long long
。
2. long long
-
字节数:8 字节(64 位)。
-
范围:
-
十进制:
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
-
幂次方:
-2^63 ~ 2^63 - 1
-
-
适用场景 :大整数运算(如 10^12 级别)、算法竞赛、结果可能超出
int
时。 -
注意 :输入输出需使用
%lld
,避免与int
混用。
3. char
-
字节数:1 字节(8 位)。
-
范围:
-
有符号:
-128 ~ 127
,即-2^7 ~ 2^7 - 1
-
无符号:
0 ~ 255
,即0 ~ 2^8 - 1
-
-
适用场景 :单个字符(如
'a'
、'1'
)、ASCII 处理、小范围整数。 -
注意 :
char
既可作字符,也可作 1 字节整数,数值运算需谨慎。
4. string
(C++ 专用)
-
说明 :基于
std::basic_string<char>
,每个字符占 1 字节(8 位),整体大小随内容动态变化。 -
适用场景:文本处理、拼接、查找、子串操作。
-
注意:
-
cin >> s
遇空格会截断,整行输入需用getline()
。 -
与 C 接口交互时可用
s.c_str()
转换为const char*
。
-
5. float
-
字节数:4 字节(32 位,符合 IEEE 754 单精度标准)。
-
范围 :约
±3.4 × 10^38
-
指数范围 :约
2^-126 ~ 2^127
-
有效精度 :7 位有效数字(约能保证小数点后 6 位)。
-
适用场景:
-
内存敏感场景(嵌入式设备、大规模浮点数组)。
-
对精度要求不高的近似计算(如图形学、绘图坐标)。
-
-
注意:精度有限,大量运算会积累误差;金融和高精度科学计算不推荐。
6. double
-
字节数:8 字节(64 位,符合 IEEE 754 双精度标准)。
-
范围 :约
±1.7 × 10^308
-
指数范围 :约
2^-1022 ~ 2^1023
-
有效精度 :15~16 位有效数字(约能保证小数点后 15 位)。
-
适用场景:
-
默认推荐:常规浮点运算。
-
科学计算:对精度要求较高的场景。
-
-
注意:
-
默认浮点字面量是
double
(例如3.14
)。 -
若需更高精度,可使用
long double
或大数库。
-
类型选择速查表
类型 | 字节数 | 位数 | 范围(十进制) | 范围(幂次方) | 精度/适用场景 |
---|---|---|---|---|---|
int |
4B | 32b | -2,147,483,648 ~ 2,147,483,647 | -2^31 ~ 2^31-1 | 常用整数,±21 亿以内 |
long long |
8B | 64b | -9.22e18 ~ 9.22e18 | -2^63 ~ 2^63-1 | 大整数运算、竞赛 |
char |
1B | 8b | -128 ~ 127 / 0 ~ 255 | -2^7 ~ 2^7-1 / 0~2^8-1 | 字符、ASCII、小整数 |
string |
动态 | 动态 | 取决于长度 | - | 文本处理 |
float |
4B | 32b | ±3.4e38 | 2^-126 ~ 2^127 | ~7 位有效数字,节省内存 |
double |
8B | 64b | ±1.7e308 | 2^-1022 ~ 2^1023 | ~15 位有效数字,默认推荐 |