从业十年,教你单片机入门 第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。
下节预告:整除求余的运算。