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

} /*---C 语言 学习区域的结 束。----- ----------- ---------- ----------- ---------- */ 在电脑串口 助手软件上观察 到的程序执行 现象 如下: 开始... 第 1 个数 十进制:255 十六进制:F F 二进制:111 11111 第 2 个数 十进制:253 十六进制:F D 二进制:111 11101 第 3 个数 十进制:655 35 十六进制:F FFF 二进制:1…

100%1 / 836
结论:
虽然 e 的运算结果侥幸是对的但是其运算过程发生了溢出是有问题的,当运算式子更复杂一些,比如
有不同类型的变量时,就有可能导致运算结果也出错所以得出的结论是在加减法运中为了减少出现减
法溢出的现象,建议先加法后减法在后续章节讲到的乘除法运算中,为了减小运算带来的误差也建议大
先乘法后除法。
【23.3 例程练习和分析。
现在我们编写一个程序来验证上面讲到的例子
程序代码如下:
/*---C 语言学习区域的开始。-----------------------------------------------*/
void main() //主函
{
unsigned char a; //定义一个变 a,并且分配 1 个字节的 RAM 空间
unsigned char b; //定义一个变 b,并且分配 1 个字节的 RAM 空间
unsigned int c; //定义一个变 c,并且分配 2 个字节的 RAM 空间
unsigned int d; //定义一个变 d,并且分配 2 个字节的 RAM 空间
unsigned char e; //定义一个变 e,并且分配 1 个字节的 RAM 空间
unsigned char f; //定义一个变 f,并且分配 1 个字节的 RAM 空间
//第一个例子,针对 a b 都是 unsigned char 类型数据。
a=0-1;
b=2-5;
//第二个例子,针对 c d 都是 unsigned int 类型的数据
c=0-1;
d=2-5;
//第三个例子,e f 的加减顺序不一样
e=1-6+7;
f=1+7-6;
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。
View(d); //把第 4 个数 d 发送到电脑端的串口助手软件上观察。
View(e); //把第 5 个数 e 发送到电脑端的串口助手软件上观察。
View(f); //把第 6 个数 f 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
1 个数
十进制:255
十六进制:FF
二进制:11111111
2 个数
十进制:253
十六进制:FD
二进制:11111101
3 个数
十进制:65535
十六进制:FFFF
二进制:1111111111111111
4 个数
十进制:65533
十六进制:FFFD
二进制:1111111111111101
5 个数
十进制:2
十六进制:2
二进制:10
6 个数
十进制:2
十六进制:2
二进制:10
分析:
通过实验结果,发现在单片机上的计算结果和我们的分析是一致的。
【23.4 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以
察到不同的变量数值,详细方法请看第十一节内容。