微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第27节:整除求商的运算

第27节:整除求商的运算

时间:11-22 来源:互联网 点击:
从业十年,教你单片机入门 第27讲:

C语言中,乘法符号不是“×”而是“*”,除法求商的符号不是“÷”而是“/”。乘除法符号跟我们日常用的数学符号有点不一样,我个人猜测C语言这样规定的原因是因为“×”容易跟大写字母“X”搞混,而“÷”这个符号在电脑键盘上不方便直接输入,故分别用“*”和“/”替代。

何谓“整除”?请看以下两个对比例子:

10除以4,商等于2.5。------(带小数点)

10除以4,商等于2,余数是2。------(这就叫做整除)

什么时候带小数点,什么时候是整除?取决于参与运算的变量类型。标准的C语言中,其实远远不止我前面所说的unsigned char ,unsigned int ,unsigned long这三种类型,还有一种叫浮点数的float类型,当参与运算的变量涉及float类型时,就可能存在小数点。这是题外话,大家大概知道有这么一回事即可,暂时不用深入研究float等其它类型的数据,因为在单片机项目中,只要用我所述的三种常用类型就绝对够用了,单片机不用涉及float类型,如果项目涉及小数点的显示和处理,我们完全可以用那三种类型去处理它,这些处理方法我后续会讲到,暂时不用管。而unsigned char ,unsigned int ,unsigned long这三种类型的除法都是整除,我后续所讲的所有章节内容也都是整除。

整除的通用格式:

“保存变量”=“被除数” / “除数1” / “除数2”... / “除数N”;

跟之前讲的加减运算一样,左边的“保存变量”必须是变量,右边的可以是变量和常量的任意组合。如果右边只有两个参与运算的数据,就是整除的常见格式。

整除的常见格式:

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

现在从整除常见格式的6个方面来分析它的规律。

(1)当“除数”等于0时。我们都知道,数**算除数是不允许等于0的,如果在单片机中非要让除数为0,商会出现什么结果?我试过,发现有一个规律:如果“除数”是变量的0,那么商等于十进制的255(十六进制是0xff)。如果“除数”是常量的0,那么商等于十进制的1。比如:

a=23 /y; //假设除数变量y里面是0,那么a的结果是255(十六进制的0xff)。

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

(2)当被除数小于“除数”时。商等于0。比如:

c=7 / 10; //c的结果是0。

(3)当被除数等于“除数”时。商等于1。比如:

d=10/ 10; //d的结果是1。

(4)当被除数大于“除数”时。商大于0。

比如:

e=10/ 4; //e的结果是2。

f=10/ 3; //f的结果是3。

(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;

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里面

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top