×
嵌入式 > 技术百科 > 详情

第27节:整除求商的运算

发布时间:2020-06-20 发布时间:
|
从业十年,教你单片机入门 第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里面显示

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。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ADI 高精度低功耗精密放大器