您的位置 首页 动态

第28节:整除求余的运算

从业十年,教你单片机入门第28讲:求余跟上一节讲的求商都是属于整除运算,区别是:求余返回余数,求商返回商。整除求余的余数有一个很明

从业十年,教你单片机入门 第28讲:

求余跟上一节讲的求商都是归于整除运算,区别是:求余回来余数,求商回来商。整除求余的余数有一个很明显的规则:余数永久小于除数(除数不为0的状况下)。比方,除数是10,那么不论被除数有多大,余数必定是从0到9的数,不可能是10以上的数。上一节说到除法求商的运算符号是“/”,而除法求余的运算符号是“%”,外形跟百分号共同,仅仅在C言语中用来做除法求余的运算符罢了。

整除求余的通用格局:

“保存变量”=“被除数”% “除数1” % “除数2”…% “除数N”;

跟之前讲的加减运算相同,左面的“保存变量”有必要是变量,右边的可所以变量和常量的恣意组合。假如右边只要两个参加运算的数据,便是整除求余的常见格局。

整除求余的常见格局:

“保存变量”=“被除数” % “除数” ;

现在从整除求余常见格局的6个方面来剖析它的规则。

(1)当“除数”等于0时。咱们都知道,数**算除数是不允许等于0的,假如在单片机中非要让除数为0,余数会呈现什么成果?我在keil的C51编译环境试过,发现有一个规则:假如“除数”是变量的0,那么余数等于被除数。假如“除数”是常量的0,那么余数等于1。还有一种特别的状况是编译不通过的,便是“被除数”是变量,而“除数”是常量的0。其实我们都知道“除数”不能为0,为什么我非要做“除数”为0时的试验呢?含义安在?我尽管知道除数为0时会犯错,可是我不知道这个错究竟严不严峻,会不会程序溃散,当我做了这个试验后,我心中的石头才放下了,如果除数为0,仅仅运算犯错,至少程序不会溃散,这样我心里就有了一个底,当哪天我某个程序溃散时,我至少能够排除了这种状况,便利我找bug。这便是本试验的含义地点。

比方:

a=23%y; //假定除数变量y里边是0,那么a的成果是23。

b=23%0; //除数是常量0,那么b的成果是1。

b=g%0; //这种特别状况编译不通过:“被除数”是变量,而“除数”是常量的0。

(2)当被除数小于“除数”时。余数等于被除数自身。比方:

c=7%10; //c的成果是7。

(3)当被除数等于“除数”时。余数等于0。比方:

d=10%10; //d的成果是0。

(4)当被除数大于“除数”时。余数也必定小于“除数”。

比方:

e=10%4; //e的成果是2。

f=10% 3; //f的成果是1。

(5)自除求余运算的简写。跟前面加减法相同,当“被除数”是“保存变量”时,存在自除求余运算的简写。

“保存变量”=“保存变量” % “除数” ;

上述自除运算的简写如下:

“保存变量” % =“除数” ;

比方:

g%=5; //相当于g=g%5;

加减法有自加1“++g”和自减1“g–”的特别写法,可是除法不存在这种自除1的特别写法,由于一个数除以1仍是等于它自身,所以自除1没有任何含义,因而C言语语法中没有这种写法。

(6)除法的溢出规则跟加法的溢出规则是相同的,所以不再多举比如。在实践项目中,为了防止一不小心就溢出的问题,我强烈建议,不论加减乘除,但凡参加运算的变量悉数都要转化成unsigned long变量,转化的办法也跟加减运算的转化办法共同,不再具体解说这方面的内容。

现在编写一个程序来操练方才讲到的内容,最终把程序编译后下载到坚鸿51学习板调查成果。请直接仿制第十节模板程序,修正的main程序代码如下:

void main() //主程序

{

/*—C言语学习区域的开端—————————————————————————*/

unsigned char a;

unsigned char b;

unsigned char c;

unsigned char d;

unsigned char e;

unsigned char f;

unsigned char g=10; //初始化为10

unsigned char y=0; //除数变量初始化为0。

a=23%y;

b=23%0;

//b=g%0; //这种特别状况编译不通过:“被除数”是变量,而“除数”是常量的0。

c=7%10;

d=10%10;

e=10%4;

f=10%3;

g%=5; //相当于g=g%5;

GuiWdData0=a; //把a这个变量放到窗口变量0里边显现

GuiWdData1=b; //把b这个变量放到窗口变量1里边显现

GuiWdData2=c; //把c这个变量放到窗口变量2里边显现

GuiWdData3=d; //把d这个变量放到窗口变量3里边显现

GuiWdData4=e; //把e这个变量放到窗口变量4里边显现

GuiWdData5=f; //把f这个变量放到窗口变量5里边显现

GuiWdData6=g; //把g这个变量放到窗口变量5里边显现

/*—C言语学习区域的完毕—————————————————————————*/

while(1)

{

initial();

key_service();

display_service();

}

}

检查运算成果的办法。如安在坚鸿51学习板上调查变量?按下S1或许S5按键即可切换显现不同的窗口,然后显现不同的变量。按下S9按键不松手就能够切换到十六进制的显现界面,松开手后会主动切换到十进制的界面。上坚鸿51学习板调查程序履行的成果如下:

变量a为23。

变量b为1。

变量c为7。

变量d为0。

变量e为2。

变量f为1。

变量g为0。

下节预告:使用“整除求商求余”来提取一个数的个十百千位。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/262152.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部