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

c=H; // c 的低 8 位被 H 覆盖,也就 是此时 c 的低 8 位得 到了 H 的各位值。 c=c<<8; //及时 把 c 的低 8 位移 动到高 8 位, 同时 c 原来的低 8 位被 填入 0 c=c+L; //此时 c 再加 L,c 的低 8 位就 L 的值。此时 c 得到了 H 和 L 合并而来的 值。 //左移的应用 之二:聚焦在 某个变量的某 个位。 d=d|(1<<0) ; //对第 0…

100%1 / 836
操作,目的就是为了增加代码可读性。
根据上述规律,假设 e 原来等于十进制的 85(十六进制是 0x55,二进制是 01010101)要想把此数据的
0 位清零,只需 e=e&(~(1<<0))最终 e 的运算结果是十进制是 84(十六进制是 0x54,二进制是 01010100)
【34.5 左移运算的“左移简写”
当被移数是“保存变量”时,存在“左移简写
“保存变量”=“保存变量”<<n;
上述左移简写如下:
“保存变量”<<=n;
比如:
unsigned char f=1;
unsigned char g=1;
f<<=1; //就相当于 f=f<<1;
g<<=2; //就相当于 g=g<<2;
【34.6 例程练习和分析。
现在编写一个程序来验证刚才讲到的“左移”运算:
程序代码如下:
/*---C 语言学习区域的开始。-----------------------------------------------*/
void main() //主函
{
unsigned char a=5;
unsigned char b=5;
unsigned char H=0x12; //单字节
unsigned char L=0x34; //单字节
unsigned int c; //双字
unsigned char d=84;
unsigned char e=85;
unsigned char f=1;
unsigned char g=1;
//左移运算中蕴含着乘 2 的规律。
a=a<<1; //a 左移 1 位,相当于 a=a*2,从原来的 5 变成了 10。
b=b<<2; //b 左移 2 位,相当于 b=b*2*2,从原来的 5 变成了 20。
//左移的应用之一:不同变量类型的合并
c=H; //c 的低 8 位被 H 覆盖,也就是此时 c 的低 8 位得到了 H 的各位值。
c=c<<8; //及时 c 的低 8 位移动到高 8 位,同时 c 原来的低 8 位被填入 0
c=c+L; //此时 c 再加 L,c 的低 8 位就 L 的值。此时 c 得到了 H L 合并而来的值。
//左移的应用之二:聚焦在某个变量的某个位。
d=d|(1<<0); //对第 0 位置 1。
e=e&(~(1<<0)); //对第 0 位清零。
//左移简写。
f<<=1; //就相当于 f=f<<1;
g<<=2; //就相当于 g=g<<2;
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。
View(d); //把第 4 个数 d 发送到电脑端的串口助手软件上观察。
View(e); //把第 5 个数 e 发送到电脑端的串口助手软件上观察。
View(f); //把第 6 个数 f 发送到电脑端的串口助手软件上观察。
View(g); //把第 7 个数 g 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
1 个数
十进制:10
十六进制:A
二进制:1010
2 个数
十进制:20
十六进制:14
二进制:10100
3 个数
十进制:4660
十六进制:1234
二进制:1001000110100
4 个数
十进制:85
十六进制:55
二进制:1010101
5 个数
十进制:84
十六进制:54
二进制:1010100
6 个数
十进制:2
十六进制:2
二进制:10
7 个数
十进制:4
十六进制:4
二进制:100
分析:
通过实验结果,发现在单片机上的计算结果和我们的分析是一致的。
【34.7 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口 51 习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。