数据类型与取值范围
基础概念
基通俗讲解
C++ 用数据类型规定变量占多少内存、能存多大数。选错类型会导致溢出或精度丢失。CSP 考试最常考:int 与 long long 的取舍。
核心必背考点
背直接默写拿分
- bool:1 字节,值 true(1) / false(0)。
- char:1 字节,−128~127(或有符号 0~255)。
- short:2 字节,−32768~32767。
- int:4 字节,−2³¹~2³¹−1 = −2147483648 ~ 2147483647(约 ±21 亿)。
- long long:8 字节,−2⁶³~2⁶³−1 ≈ ±9.2×10¹⁸。
- float:4 字节,约 6–7 位有效数字;double:8 字节,约 15–16 位。
- sizeof(x):返回变量/类型占用的字节数(编译期常量)。
高频难点 / 拉分考点
难考场极易丢分
① 溢出回卷:int 最大值 +1 变成最小负数(补码回卷),极其隐蔽。
② 数据范围选类型:n≤10⁹ 用 int;阶乘、连乘、10¹⁸ 量级必须用 long long。
③ 浮点判等:用 fabs(a-b) < 1e-9 而非 a==b。
④ 整数除法截断:5/2 得 2,不是 2.5。
出题陷阱
坑文字套路
- “int a = 1e9 * 3” 仍可能溢出——1e9 是 double,但赋值后计算在 int 范围外时需先转 long long。
- 两个 int 相除结果仍是 int,要得到小数需先乘 1.0。
- char 做运算会提升为 int,结果类型是 int 不是 char。
90分高分技巧
技速算捷径
- 范围速记:int ≈ ±21 亿,long long ≈ ±9×10¹⁸。
- 选材法则:超过 21 亿或连乘 → 直接 long long,宁可浪费不溢出。
- 防溢出:读入即
long long,输出再转。
梯度真题
基础int 类型能表示的最大正整数是?
2³¹−1 = 2147483647。
▍解析:答案为 2147483647。
中档int a = 2147483647; a = a + 1; 后 a 的值?
补码回卷:越过上限变成最小负数 −2147483648。
| 1 | int a = 2147483647; |
| 2 | a = a + 1; // 溢出,a 变为 -2147483648 |
▍解析:答案为 -2147483648。这是初赛经典溢出题。
压轴计算 1×2×…×20 应选用哪种类型?
20! ≈ 2.4×10¹⁸ > int 上限,必须用 long long(甚至超出时还要高精度)。
▍解析:答案为 long long(或更高级)。
记忆口诀
技📌 记忆口诀
“int 二十一亿顶,long long 九乘十的十八;超界先转 long long,浮点判等加eps。”
📝 本节自测共 6 题
做完点「提交本节自测」即时判分;单选 / 多选 / 填空混合,答错可一键收入错题本。
32 位 C++ 中 int 通常占几个字节? 易
✅ 正确答案:A
通常 int = 4 字节。
unsigned int 与 int 同为 4 字节时,unsigned int 最大值是 ____ (十进制)。 填空题 中
✅ 正确答案:4294967295
2^32 - 1 = 4294967295。
下列能表示负数的类型有?(多选) 多选题 难
✅ 正确答案:ABD
unsigned 不能表示负;其余有符号。
若 a = 6,b = 4,则 a % b 的结果是 ____ 。(填空) 填空题 中
✅ 正确答案:2
6 除以 4 余 2。
布尔值 true 当作整数参与运算时等于 ____ 。(填空) 填空题 易
✅ 正确答案:1
C++ 中 true 即 1,false 即 0。
下列哪些是 C++ 中的循环结构?(多选) 多选题 中
✅ 正确答案:ABC
for / while / do-while 是循环;switch 是多分支选择。