一、前言
本文作者是从 2007 年开始学 C语言 的,不久又接触了C++,基本就是 C/C++ 技术栈写了 14 年的样子,不算精通,但也算差强人意。著有《夜深人静写算法》系列,且承诺会持续更新,直到所有算法都学完。主要专攻 高中 OI 、大学 ACM、 职场 LeetCode 的全领域算法。由于文章中采用 C/C++ 的语法,于是就有不少读者朋友反馈语言层面就被劝退了,更何况是算法。
于是,2021 年 06 月 12 日,《光天化日学C语言》 应运而生。并且作者在此承诺,这个系列全部文章均免费且开源,主要服务于高中生、大学生以及职场上想入坑C语言的志同道合之人,希望能给祖国引入更多编程方面的人才,并且让自己的青春不留遗憾!
这一章将介绍计算中最简单的编码方式——ASCII 码。
二、人物简介
- 第一位登场的就是今后会一直教我们C语言的老师 —— 光天。
- 第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。
三、ASCII 码简介
1、ASCII 码的定义
- ASCII 码(即 American Standard Code for Information Interchange),翻译过来是美国信息交换标准代码。
- 我们一般念成 ask 2 马。
2、ASCII 码的起源
- 它是一套编码系统。
- 由于计算机用 高电平 和 低电平 分别表示 1 和 0,所以,在计算机中所有的数据在存储和运算时都要使用二进制数表示,例如,像
a-z
、A-Z
这样的52个字母以及0-9
的数字还有一些常用的符号(例如?*#@!@#$%^&*()
等)在计算机中存储时也要使用二进制数来表示,具体用哪些二进制数字表示哪个符号,每个人都可以约定自己的一套规则,这就叫编码。 - 即 一个数字 和 一个字符 的一一映射。
- 为了通信而不造成混淆,所以需要所有人都使用相同的规则。
3、ASCII 码的表示方式
- 标准ASCII 码,使用 7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字
0
到9
、标点符号,以及在英语中使用的特殊控制字符。 - 简单的就可以认为:一个数字对应一个字符。具体如下表所示:
四、ASCII 码的输出
- ASCII 码对应的字符用单引号括起来,并且是可以按照两种方式来输出的,分别为:字符形式 和 整数形式。
1、字符
- 当成字符用的时候,用格式化输出
%c
来控制,如下:
#include <stdio.h>
int main() {
printf("%c\n", '0');
printf("%c\n", 'A');
printf("%c\n", 'a');
printf("%c\n", '$');
return 0;
}
- 得到的输出结果如下:
0
A
a
$
2、整数
- 当成整数用的时候,用格式化输出
%d
来控制,如下:
#include <stdio.h>
int main() {
printf("%d\n", '0');
printf("%d\n", 'A');
printf("%d\n", 'a');
printf("%d\n", '$');
return 0;
}
- 得到的输出结果如下:
48
65
97
36
- 这是因为一个字符代表的是一个整数到符号的映射,它本质上还是一个整数,所以我们可以用整数的形式来输出。字符
'0'
的整数编码为48,字符'1'
的整数编码为49,以此类推。
五、ASCII 码的运算
- 既然当成了整数,那么就可以进行简单的四则运算了。
- 我们简单来看下下面这段代码:
#include <stdio.h>
int main() {
printf("%c\n", '0' + 5);
printf("%c\n", 'A' + 3);
printf("%c\n", 'a' + 5);
printf("%c\n", '$' + 1);
return 0;
}
- 它的输出如下:
5
D
f
%
- 字符加上一个数字,我们可以认为是对字符编码进行了一个对应数字的偏移,字符
'0'
向右偏移 5 个单位,就是字符'5'
;同样的,'A'
向右偏移3个单位,就是字符'D'
。 - 有加法当然也有减法,接下来让我们看个例题。
【例题1】给出如下代码,给出它的输出结果。
#include <stdio.h>
int main() {
printf("%c\n", 'A' - 10);
return 0;
}
- 建议先想想,然后再敲代码看看结果,是否和你想的一致。
六、ASCII 码的比较
- ASCII 码既然可以和整数无缝切换,那么自然也可以进行比较了。
- 通过上一节,我们了解到了
'0'
加上1
以后等于'1'
,那么顺理成章可以得出:'0' < '1'
。 - 同样可以知道:
'a' < 'b'
、'X' < 'Y'
。 - 那么,我们再来看个问题。
【例题2】请问
'a' < 'A'
还是'a' > 'A'
。
通过这一章,我们学会了:
1)ASCII 码的表示;
2)ASCII 码的运算;
3)ASCII 码的比较;
- 希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!