第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里面
整除求商运算单片 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)