3 ASCII编码与数据类型转换

正在加载视频播放器…

GESP C++ 二级:ASCII 编码与数据类型转换精讲

核心目标:掌握ASCII 编码概念、常见字符编码、字符与整数关系、字符运算、大小写转换、数字字符与数字互转、转义字符;隐式类型转换、显式类型转换、整数与浮点转换、字符与整数转换、布尔与整数转换、转换规则与易错点。
字符本质是 ASCII 码整数;类型转换分自动和强制,转换方向影响结果,转换位置决定精度。

第一部分:ASCII 编码

1. ASCII 是什么

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种字符编码标准,用 0~127 的整数表示常用字符。

  • 标准 ASCII:0~127,共 128 个字符。
  • 扩展 ASCII:128~255,共 128 个字符。
  • 在 C++ 中,char 类型存的就是字符对应的 ASCII 码。
char c = 'A';
cout << (int)c << endl;   // 输出 65

2. 关键 ASCII 值(必记)

字符 ASCII 字符 ASCII
'\0' 0 '0' 48
'\n' 10 '9' 57
' ' 32 'A' 65
'0' 48 'Z' 90
'9' 57 'a' 97
'A' 65 'z' 122
'Z' 90
'a' 97
'z' 122

规律:

  • 数字字符 '0' 到 '9' 连续。
  • 大写字母 'A' 到 'Z' 连续。
  • 小写字母 'a' 到 'z' 连续。
  • 同一字母,小写比大写大 32。
'a' - 'A' = 97 - 65 = 32

3. 字符与整数的关系

char 可以和 int 互相转换:

char c = 'A';
int x = c;          // 65
cout << (int)c;     // 65
cout << (char)65;   // A

字符参与算术运算时,会自动转成整数:

char c = 'A';
cout << c + 1 << endl;        // 66
cout << (char)(c + 1) << endl; // B

4. 字符运算常见模型

4.1 字母偏移

char c = 'A';
c = c + 2;          // 'C'
cout << c << endl;  // C

4.2 数字字符转数字

char c = '7';
int x = c - '0';    // 7
cout << x << endl;

4.3 数字转数字字符

int x = 7;
char c = x + '0';   // '7'
cout << c << endl;

4.4 输出 ASCII 码

char c;
cin >> c;
cout << (int)c << endl;

5. 大小写转换

5.1 小写转大写

char c = 'a';
c = c - 'a' + 'A';   // 'A'
// 或 c = c - 32;

5.2 大写转小写

char c = 'A';
c = c - 'A' + 'a';   // 'a'
// 或 c = c + 32;

5.3 使用函数(了解)

需要头文件:

#include <cctype>
c = toupper(c);   // 小写转大写
c = tolower(c);   // 大写转小写

注意:只对字母有效,非字母不变。

6. 转义字符

转义字符 含义 ASCII
'\n' 换行 10
'\t' 制表符 9
'\\' 反斜杠 92
'\'' 单引号 39
'\"' 双引号 34
'\0' 空字符 0

示例:

cout << "A\tB" << endl;   // A    B
cout << "A\nB" << endl;   // A 换行 B

7. 字符输入输出注意

char c;
cin >> c;      // 跳过空格、换行、制表符
cin.get(c);    // 读取任意一个字符,包括空格和换行

8. ASCII 常见题型与易错点

题型:

  • 给出字符,输出 ASCII 码。
  • 给出 ASCII 码,输出字符。
  • 字符加密:每个字符加一个偏移量。
  • 大小写转换。
  • 数字字符与数字互转。
  • 判断字符类型。

易错点:

  1. '0' 是字符,ASCII 48;0 是整数。
  2. 'A' 和 "A" 不同:单引号字符,双引号字符串。
  3. 数字字符转数字要减 '0',不是直接赋值。
  4. 大小写差 32,小写比大写大。
  5. cin >> c 会跳过空格,读空格用 cin.get(c)。
  6. 字符运算结果默认是整数,输出字符要 (char) 转换。

第二部分:数据类型转换

9. 为什么需要类型转换

不同类型的数据运算时,计算机需要统一类型。C++ 提供两种转换:

转换方式 特点 示例
隐式转换 自动完成,不需要写转换符号 double x = 5;
显式转换 手动强制转换 (double)5 / 2

10. 隐式类型转换(自动转换)

10.1 小类型转大类型

int a = 5;
double b = a;      // 5 变成 5.0

常见转换方向:

char → int → long long → float → double
bool → int

10.2 混合运算自动提升

int a = 5;
double b = 2.5;
cout << a + b << endl;   // 7.5,a 自动转 double

规则:低精度类型向高精度类型转换。

10.3 赋值时右边转左边

int a = 3.9;   // a = 3,小数被截断
double b = 5;  // b = 5.0

11. 显式类型转换(强制转换)

语法:

(类型)表达式

示例:

int a = 5, b = 2;
double c = (double)a / b;   // 2.5

也可以:

double d = (double)(a / b); // 2.0

关键:转换位置不同,结果不同。

(double)a / b;    // 先把 a 转 double,再除,结果 2.5
(double)(a / b);  // 先整数除得 2,再转 double,结果 2.0

12. 常见转换场景

12.1 整数转浮点

int a = 5;
double b = (double)a;   // 5.0

12.2 浮点转整数

double x = 3.9;
int n = (int)x;   // 3,截断,不是四舍五入

负数:

double y = -3.9;
int m = (int)y;   // -3

12.3 字符与整数

char c = 'A';
int x = (int)c;      // 65
char d = (char)65;   // 'A'

12.4 布尔与整数

bool flag = true;
int x = flag;        // 1
bool b = 5;          // true
bool c = 0;          // false

13. 整数除法与浮点除法

这是二级高频易错点。

cout << 5 / 2 << endl;      // 2
cout << 5.0 / 2 << endl;    // 2.5
cout << 5 / 2.0 << endl;    // 2.5
cout << (double)5 / 2 << endl;  // 2.5
cout << 1.0 * 5 / 2 << endl;    // 2.5
表达式 结果 说明
5 / 2 2 整数除法
5.0 / 2 2.5 浮点除法
(double)5 / 2 先转 double
(double)(5 / 2) 2.0 先整数除,再转 double
1.0 * 5 / 2 2.5 常用技巧

14. 类型提升规则(了解)

当不同类型混合运算时,按以下顺序提升:

bool → char → int → long long → float → double

例如:

int a = 3;
char c = 'A';
cout << a + c << endl;   // 68,c 转 int

15. 溢出与截断

15.1 溢出

int a = 100000;
int b = 100000;
int c = a * b;          // 可能溢出
long long d = 1LL * a * b;  // 正确

15.2 截断

int a = 3.9;   // 3
int b = 3.1;   // 3
int c = -3.9;  // -3

16. 数据类型转换常见题型与易错点

题型:

  • 阅读程序写结果:表达式类型转换后输出什么。
  • 判断表达式结果类型。
  • 整数除法与浮点除法。
  • 强制转换位置。
  • 字符与整数转换。
  • 溢出判断。

易错点:

  1. 浮点转整数是截断,不是四舍五入。
  2. 两个整数相除结果一定是整数。
  3. (double)(a / b) 和 (double)a / b 结果不同。
  4. int 溢出不会报错,但结果错误。
  5. char 与 int 转换时忘记 ASCII。
  6. '0' 不是 0,是 48。
  7. bool 输出默认是 1/0,不是 true/false。
  8. 强制转换只影响当前表达式,不改变变量本身类型。

第三部分:综合应用与速查

17. 综合示例

示例 1:字符加密

char c;
cin >> c;
c = c + 3;          // 每个字符后移 3 位
cout << c << endl;

输入 A,输出 D。

示例 2:数字字符转数字并求和

char c1, c2;
cin >> c1 >> c2;
int sum = (c1 - '0') + (c2 - '0');
cout << sum << endl;

输入 3 5,输出 8。

示例 3:大小写转换

char c;
cin >> c;
if (c >= 'a' && c <= 'z') {
    c = c - 32;
}
cout << c << endl;

输入 b,输出 B。

示例 4:整数除法与浮点除法

int a = 7, b = 2;
cout << a / b << endl;              // 3
cout << (double)a / b << endl;      // 3.5
cout << (double)(a / b) << endl;    // 3

18. 速查表

需求 写法
字符转 ASCII (int)c
ASCII 转字符 (char)x
数字字符转数字 c - '0'
数字转数字字符 x + '0'
小写转大写 c - 32 或 c - 'a' + 'A'
大写转小写 c + 32 或 c - 'A' + 'a'
字符是否数字 c >= '0' && c <= '9'
字符是否大写 c >= 'A' && c <= 'Z'
字符是否小写 c >= 'a' && c <= 'z'
隐式转换 double x = 5;
显式转换 (double)a / b
浮点转整数 (int)x
整数转浮点 (double)a
布尔转整数 int x = true;
整数转布尔 bool b = 5;

19. 总结

ASCII 与类型转换是二级考试的核心基础。

  1. 字符本质是 ASCII 码整数。
  2. '0' 是 48,'A' 是 65,'a' 是 97。
  3. 小写字母比大写字母大 32。
  4. 数字字符转数字要减 '0'。
  5. 数字转数字字符要加 '0'。
  6. 字符参与运算会自动转整数,输出字符要 (char)。
  7. 隐式转换自动发生,显式转换用 (类型)。
  8. 浮点转整数是截断,不是四舍五入。
  9. 两个整数相除结果是整数,要小数就转浮点。
  10. 转换位置决定结果,括号很重要。

复习建议:多练“阅读程序写结果”和“字符运算”两类题,重点注意 ASCII 值、大小写差 32、数字字符转换、强制转换位置、整数除法与浮点除法。考试中先判断参与运算的类型,再确定转换方向,最后按格式输出。