从单片机基础到程序框架(全集 2019pdf版).pdf - 第128页

第 8 个数 十进制:2 十六进制:2 二进制:10 分析: 通过实验结 果,发现在单 片机上的计算 结果和 我们的分析是 一致的。 【29.5 如何在单片机上练习本章节 C 语言程序?】 直接复制前 面章节中第十 一节的模板程 序, 练习代码时只需要 更改 “ C 语言学习区 域” 的 代码就可 以了, 其它 部分的 代码 不要动 。编 译后 ,把程 序下 载进带 串口 的 51 学 习板, 通过 电脑 端的串 口助 手软件 就可 以…

100%1 / 836
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
1 个数
十进制:8
十六进制:8
二进制:1000
2 个数
十进制:5
十六进制:5
二进制:101
3 个数
十进制:6
十六进制:6
二进制:110
4 个数
十进制:2
十六进制:2
二进制:10
5 个数
十进制:8
十六进制:8
二进制:1000
6 个数
十进制:5
十六进制:5
二进制:101
7 个数
十进制:6
十六进制:6
二进制:110
8 个数
十进制:2
十六进制:2
二进制:10
分析:
通过实验结果,发现在单片机上的计算结果和我们的分析是一致的。
【29.5 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口 51 习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。
第三十节:逻辑运算符的“与”运算。
【30.1 “与”运算。
不管是十进制还是十六进制,单片机底层的运算都是以二进制的形式进行的,包括前面章节的加减乘除
运算,在单片机的底层处理也是以二进制形式进行不过加减乘除我们平时太熟悉了,以十进制的形式
算或者笔算也能得到正确的结果,所以不需要刻意把十进制的数据先转换成二进制,然后再模拟单片机底层
的二进制运算。但是本节的逻辑“与”运算,在分析它的运算过程和规律的时候必须把所有的数据都转化
成二进制才能进行分析,因为它强调的是二进制的位与位之间的逻辑运算。我们知道,二进制中的每一位只
能是 0 或者 1,两个数的“与”运算就是两个数被展开成二进制后的位与位之间的逻辑“与”运算。
“与”运算的运算符号是“&运算规律是:两个位进行“与”运算,只有两个位都同时 1 算结
才能等于 1,,否则,只要其中有一位是 0,运算结果必 0.比如:
0&0 等于 0。
0&1 等于 0。
1&0 等于 0。
1&1 等于 1。
注意,上述 0 1 都是指二进制的 0 1。
现在举一个完整的例子来分析“与”运算的规律有两个 unsigned char 类型的十进制数分别是 12 9,
12&9 的结果是多少?分析步骤如下:
第一步:先把参与运算的两个数以二进制的格式展开。十进制转二进制的方法请参考前面第 14,15,16
节的内容。
十进制 12 的二进制格式是:00001100。
十进制 9 的二进制格式是: 00001001。
第二步:二进制数右对齐,按上下每一位进行“与”运算
十进制的 12 -> 00001100
十进制的 9 -> &00001001
“与”运算结果是 -> 00001000
第三步:把二进制的 00001000 转换成十六进制是:0x08。转换成十进制是 8。所以 12&9 的结果是 8。
上述举的例子只能分析“与运算的规律,并没有看“与”运算的意义所在。“与”运算有啥用途呢?
unsigned char 类型的变量 b,数据长度一共是 8 位,从右往左:
想让第 0 位清零,其它位保持不变,只需跟十六进制的 0xfe 相“与”:b=b&0xfe。
想让第 1 位清零,其它位保持不变,只需跟十六进制的 0xfd 相“与”:b=b&0xfd。
想让第 2 位清零,其它位保持不变,只需跟十六进制的 0xfb 相“与”:b=b&0xfb。
想让第 3 位清零,其它位保持不变,只需跟十六进制的 0xf7 相“与”:b=b&0xf7。
想让第 4 位清零,其它位保持不变,只需跟十六进制的 0xef 相“与”:b=b&0xef。
想让第 5 位清零,其它位保持不变,只需跟十六进制的 0xdf 相“与”:b=b&0xdf。
想让第 6 位清零,其它位保持不变,只需跟十六进制的 0xbf 相“与”:b=b&0xbf。