🎁 当前为 免费试看 内容 · 开通VIP 解锁 CSP-J/S 集训全部六大模块 + 真题模考 + 高分技巧

数据类型与取值范围

所属模块 C++程序语法初赛分值 约 3–4 分出题类型 选择题 / 阅读程序难度 ★★☆☆☆近5年频次 每年 1 题

基础概念

基通俗讲解

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。

C++
1int a = 2147483647;
2a = 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 通常占几个字节? 易
unsigned int 与 int 同为 4 字节时,unsigned int 最大值是 ____ (十进制)。 填空题 中
下列能表示负数的类型有?(多选) 多选题 难
若 a = 6,b = 4,则 a % b 的结果是 ____ 。(填空) 填空题 中
布尔值 true 当作整数参与运算时等于 ____ 。(填空) 填空题 易
下列哪些是 C++ 中的循环结构?(多选) 多选题 中

🧭 学习路径

📚 前置
(模块起点)
📍 本页
数据类型与取值范围
收藏后可在 错题本 / 收藏页 查看(仅保存在本机浏览器)
📚 本站为 www.xxw123.com 之「CSP-J/S 初赛集训」栏目 ↩ 返回网站首页

📐 公式速查面板

📝 我的笔记

写下你的心得、易错点、口诀…

已输入 0 字 · 仅存本机 ✓ 自动保存