第二十七节:整除求商的运算。 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。比如:
(3)当被除数等于“除数”时。商等于1。比如:
(4)当被除数大于“除数”时。商大于0。 比如: - e=10/ 4; //e的结果是2。
- f=10/ 3; //f的结果是3。
(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里面显示
- GuiWdData5=f; //把f这个变量放到窗口变量5里面显示
- GuiWdData6=g; //把g这个变量放到窗口变量5里面显示
-
- /*---C语言学习区域的结束---------------------------------------------------------------------------*/
- while(1)
- {
- initial();
- key_service();
- display_service();
- }
- }
查看运算结果的方法。如何在坚鸿51学习板上观察变量?按下S1或者S5按键即可切换显示不同的窗口,从而显示不同的变量。按下S9按键不松手就可以切换到十六进制的显示界面,松开手后会自动切换到十进制的界面。上坚鸿51学习板观察程序执行的结果如下: 变量a为255(十六进制是0xff)。 变量b为1。 变量c为0。 变量d为1。 变量e为2。 变量f为3。 变量g为2。 下节预告:整除求余的运算。 (未完待续)
|