九、C语言的运算符
C语言提供了30多个运算符,范围很大,应用广。除了控制语句和输入、输出之外,几乎所有的基本操作,都是按照运算符来进行处理的,可见其在C语言中的重要性。
1.C语言运算符的作用与分类
C语言的运算符可以灵活地与运算对象组合成运算表达式。按其在表达式中的作用,运算符可分成基本运算符和其他运算符。基本运算符有8类,即算术运算符、关系运算符、逻辑运算符、自增运算符、自减运算符、字位运算符、赋值运算符、条件运算符、逗号运算符等。而其他运算符有指针运算符和杂项运算符等。每类运算符又包含了多种运算符。
2.基本运算符
(1)算术运算符及自增、自减运算符。
表4列出了加、减、乘、除、取模5种算术运算符,以及自增、自减运算符的操作说明。其中,除法运算符又分两种情况,一是整除, 口两个整数相除,所得商舍尾数,仅取整数部分,如5/10等于0;二是实除,即两个实数相除,所得商也是实数,如5.0/10等于0.5。
表4 算术和自增自减运算符
自增运算符++和白减运算符一一,是C语言中最具特色的单目(一个量)运算符,其操作对象必须是整型变量,而不能为常量或表达式,其功能分别是使变量增1或减1。自增运算符++和自减运算符一有前缀运算符和后缀运算符两种应用方式,两者产生的效果有些不同:前缀运算符,如++i或--j,在使用j之前,先使j的值+1或-1;后缀运算符j++或j-。
在使用i之后,才使i的值加1或减1。
例如,Y的原值等5,则:
语句X=++y, 表示y先加1再运算, 得y=y+1.6,x=y=6;语句×=y++, 表示Y先运算再加1, 得x=y=5,y=y+1=6。
在《PIC单片机C语言程序(一)》的延时函数中,我们已用过后缀运算符i++,大家可以从中体会其用法。
(2)逻辑运算符。
逻辑运算符是基本运算符中的一种。逻辑运算符有:与“&&”、或“||“ 、非“!”等3三种。
逻辑运算符&&、||为双目(两个量)运算符,!为单目运算符。它们要求的操作对象是非0的整型值和整型0表示的逻辑量。其运算规则如下:
1)若两个操作对象都为非0整型值(真),则相与的结果为1(真),否则为0(假);2)若两个操作对象都为整型值0(假),则相或结果为0(假),否则为1(真);3)若操作对象为非0整型值(真),求非的结果为0(假),否则为1(真)。
这里补充一点,算术运算符中的加、减和乘,与大家熟悉的算术运算规则完全相同,而除运算符应按上述规范使用。
C语言的运算符内容较多,限于篇幅,这里仅概况地加以介绍,希望读者在学习时,根据PIC单片机书籍,深入学习C语言的运算符,并通过编写C语言程序,掌握每个运算符的意义和使用规则。
3.可预置起始时刻的时钟程序
(1)硬件电路。
利用《PIC单片机C语言程序(四)》一文中的4位LED数码管显示电路(图3),可以制成24小时或12小时循环显示的时钟电路。且该时钟可以由人工预置起始时刻,即电路插上电源后,可根据当时的实时时刻,如手机或电视屏上显示的时刻,进行人工校时,之后即可作时钟用;若不进行人工预置(校时),该电路就自动从00,O0开始,以分为单位起始计时,此时,该电路可作人工守候定时器。该时钟电路不显示秒,而是以分钟开始的显示。
该电路仍采用PIC16F84A芯片,当写入本文下面给出的程序后,即可作24小时时钟用。其使用方法如下:
插上电源,LED数码管显示00.00,按下图3中的K1键,数码管全灭,松开K1键,再按下K1键,数码管从0(分位)开始计数,到达指定的分钟显示时,放开K1键,又按K1键,时位显示,到达指定的时显示时,放开K1,时钟即按人工预置起始时刻工作,操作十分简单。
注意:如果预置时间的时位是从00开始而仅有分钟的有效值时,当预置分钟指定值后,仍要再按下K1键,使时位从00递增又回到00,时钟即可工作,否则时钟电路不会工作。
(2)24小时的时钟C程序。
根据图3编写的24小时时钟电路的功能,可绘出相关流程图(限于篇幅,这里从略,若需要,可根据《PlC单片机C语言程序(四)》一文的图5,0~9999的计数流程图,加上下面的C程序中的注释,扩展绘出),再由流程图编写出24小时的时钟C程序。该程序命名为pic0.5.C,其清单如下:
说明:1)上述C程序,经picc编译器编译。
生成目标码。hex,即可用编程器将。hex程序烧写到pic16F84A芯片中,再用《PIC单片机C语言程序(四)》一文中图3电路即可制成24小时的时钟。该时钟与标准时间相比,仅慢1秒/周。略增、减本程序中的d值,可再校时。
2)初学者仔细查看程序中的注释,即可理解本C程序的编写原理。
3)上述时钟程序很易改成倒计时程序。