变量与数据类型

概念讲解

基本数据类型

类型 大小 范围 用途
int 4 字节 -2³¹ ~ 2³¹-1 整数
long long 8 字节 -2⁶³ ~ 2⁶³-1 大整数
float 4 字节 约 6-7 位有效数字 小数
double 8 字节 约 15-16 位有效数字 高精度小数
char 1 字节 -128 ~ 127 字符
bool 1 字节 true/false 布尔值

变量声明

12345int a = 10;
long long b = 1000000000000LL;
double c = 3.14;
char d = 'A';
bool e = true;

常见陷阱

1. 整数溢出

12int a = 2147483647;  // int 最大值
int b = a + 1;       // 溢出!b = -2147483648

2. 浮点精度

12double a = 0.1 + 0.2;
if (a == 0.3) { ... }  // 可能不成立!

3. 类型转换

123int a = 5;
double b = a;  // int -> double,OK
int c = 3.7;   // double -> int,c = 3(截断)

考点分析

初赛考查方式

  1. 选择题: 数据类型范围
  2. 程序阅读: 溢出判断
  3. 填空题: 类型转换

常见题型

  • 数据类型范围
  • 整数溢出
  • 类型转换

例题精讲

例题 1:数据类型范围

题目: int 类型能表示的最大正整数是多少?

解答:

2147483647 (2³¹-1)

例题 2:整数溢出

题目: 以下代码的输出是什么?

123int a = 2147483647;
int b = a + 1;
cout << b;

解答:

-2147483648
溢出变成最小负数

练习题

  1. long long 类型能表示的最大正整数是多少?
查看答案

9223372036854775807(即 263−12^{63}-1)

long long 占 8 字节,范围是 −263-2^{63} 到 263−12^{63}-1。

  1. 以下代码的输出是什么?
123int a = 5;
double b = 2;
cout << a / b;
查看答案

输出:2.5

a / b 中 a(int)自动转换为 double,执行浮点除法,结果是 2.5。

  1. 如何避免整数溢出?
查看答案
  1. 使用 long long 代替 int 存储大数
  2. 在运算前进行类型转换:(long long)a * b
  3. 使用取模运算控制范围
  4. 注意中间结果也可能溢出

易错点

⚠️ 注意:

  1. int 范围约 ±21 亿
  2. 大数运算要用 long long
  3. 浮点数比较不能用 ==
  4. 注意类型转换