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

unsigned c har e; unsigned c har f; unsigned c har g; unsigned c har h=9; //初 始化为 9。 unsigned c har k=10; //初始 化为 10。 unsigned c har y=0; //除数变量初 始化为 0。 //(1)当 除数等于 0 时。 a=23%y; b=23%0; // b=k%0; //这种 特殊情况编译 不通过: “ 被除数”是…

100%1 / 836
(4)当被除数大于除数时。余数必然小于除数。比如:
unsigned char e;
unsigned char f;
e=10%4; //e 的结果是 2。
f=10%3; //f 的结果是 1。
(5)当除数等 1 时。余数必然等于 0。
unsigned char g;
g=7%1; //g 的结果是 0。
【28.2 整除求余的自除简写。
当被除数是“保存变量”时,存在自除求余的简写。
“保存变量”=“保存变量” % “除数” ;
上述自除求余的简写如下
“保存变量” % =“除数” ;
比如:
unsigned char h=9;
h%=5; //相当 h=h%5; 最后余数的计算结果是 4。
【28.3 整除求余有没有“自除 1”的特殊写法?】
加减法有自 1“++g”和自 1“g--”的特殊写法,但是求余的除法不存在这种自除 1 特殊写法,
因为任何一个数除以 1 的余数必然等于 0,所以求余的自除 1 没有任何意义,因此 C 语言语法中没有这种特
殊写法。
【28.4 整除求余的溢出。
不管是求商还是求余,除法的溢出规律跟加法的溢出规律是一样的,所以不再多举例子在实际项目中,
为了避免一不小心就溢出的问题,我建议,不管加减乘除,凡是参与运算的变量全部都应该转化 unsigned
long 变量,转化的方法已经在前面章节讲过,不再重复讲解这方面的内容。
【28.5 例程练习和分析。
现在编写一个程序来验证刚才讲到的整除求余
程序代码如下:
/*---C 语言学习区域的开始。-----------------------------------------------*/
void main() //主函数
{
unsigned char a;
unsigned char b;
unsigned char c;
unsigned char d;
unsigned char e;
unsigned char f;
unsigned char g;
unsigned char h=9; //初始化为 9。
unsigned char k=10; //初始化为 10。
unsigned char y=0; //除数变量初始化为 0。
//(1)当除数等于 0 时。
a=23%y;
b=23%0;
// b=k%0; //这种特殊情况编译不通过:被除数”是变量,而“除数”是常量 0。
//(2)当被除数小于除数时。
c=7%10;
//(3)当被除数等于除数时。
d=10%10;
//(4)当被除数大于除数时。
e=10%4;
f=10%3;
//(5)当除数等于 1 时。
g=7%1;
//(6)自除求余的简写。
h%=5; //相当 h=h%5;
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 发送到电脑端的串口助手软件上观察。
View(h); //把第 8 个数 h 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
1 个数
十进制:23
十六进制:17
二进制:10111
2 个数
十进制:1
十六进制:1
二进制:1
3 个数
十进制:7
十六进制:7
二进制:111
4 个数
十进制:0
十六进制:0
二进制:0
5 个数
十进制:2
十六进制:2
二进制:10
6 个数
十进制:1
十六进制:1
二进制:1
7 个数
十进制:0
十六进制:0
二进制:0
8 个数
十进制:4
十六进制:4
二进制:100