- 分享
数据类型
- 2025-1-11 17:13:50 @
C++ 常用数据类型详解(CSP-J 重点版)
一、整型(整数)
类型 | 字节 | 数值范围 | 注意事项 | 输入输出标识符 |
---|---|---|---|---|
short |
2 | -32768 ~ 32767 | 适合存储小范围整数 | %hd |
int |
4 | -2.1×10⁹ ~ 2.1×10⁹(约9位) | 默认整数类型,运算效率最高 | %d |
long |
4/8 | -2.1×10⁹ ~ 9.2×10¹⁸(系统相关) | 不建议使用(跨平台不一致) | %ld |
long long |
8 | -9.2×10¹⁸ ~ 9.2×10¹⁸(19位) | 必须用 LL 后缀(如 123456789LL ) |
%lld |
unsigned int |
4 | 0 ~ 4.2×10⁹ | 存储非负数,扩大正数范围 | %u |
典型应用场景:
- 计数器:
int
(循环变量) - 大数计算:
long long
(阶乘、斐波那契数列) - 位运算:
unsigned int
(处理二进制位)
二、浮点型(小数)
类型 | 字节 | 有效位数 | 数值范围 | 精度问题示例 |
---|---|---|---|---|
float |
4 | 6~7位 | ±3.4×10⁻³⁸ ~ ±3.4×10³⁸ | 0.1 + 0.2 ≠ 0.3 (二进制存储误差) |
double |
8 | 15~16位 | ±1.7×10⁻³⁰⁸ ~ ±1.7×10³⁰⁸ | 推荐默认使用 |
long double |
16 | 18~19位 | ±1.1×10⁻⁴⁹³² ~ ±1.1×10⁴⁹³² | 竞赛中极少使用 |
三、字符与字符串
类型 | 存储方式 | 输入输出 | 常用操作 |
---|---|---|---|
char |
ASCII码(1字节) | %c |
转义字符(\n 换行,\t 制表符) |
string |
动态字符数组(自动扩容) | cin >> s / cout << s |
s.length() , s.substr(pos, len) |
重要区别:
// C风格字符串(数组形式)
char str[10] = "hello"; // 需要预留'\0'位置
// C++字符串对象
string s = "world"; // 自动管理内存
四、布尔类型
类型 | 取值 | 内存占用 | 逻辑运算 |
---|---|---|---|
bool |
true /false |
1字节 | && (与), ` |
注意事项:
- 非零值会自动转为
true
,零值转false
- 条件判断中避免写
if(b == true)
,直接写if(b)
五、类型转换
转换类型 | 示例 | 风险 |
---|---|---|
隐式转换(自动) | int a = 3.14; → a=3 |
精度丢失 |
显式强制转换 | double b = (double)5/2; → 2.5 |
可能溢出(如 int(5000000000.0) ) |
六、真题实战示例
题目(CSP-J 2022模拟题):
以下代码的输出是什么?
int main() {
double a = 123456789.0;
cout << fixed << setprecision(0) << a;
}
答案:123456789
(double
可精确存储9位整数)
七、编程技巧
- 大数处理:
// 计算2^60(必须用long long) long long ans = 1LL << 60;
- 高精度需求:
- 超过
long long
范围时需用字符串或数组模拟计算
- 超过
- 字符运算:
char c = 'A'; cout << (char)(c + 32); // 输出'a'(ASCII码转换)
附:数据类型选择决策树
需要存储的数据类型?
├── 整数 →
│ ├── 数值 ≤ 1e9 → int
│ └── 数值 > 1e9 → long long
├── 小数 →
│ ├── 需要高精度 → double
│ └── 内存敏感 → float
├── 单个字符 → char
└── 文本 → string
0 条评论
目前还没有评论...