C语言的运算符有以下几类:算术运算符、逻辑运算符、位操作运算符、赋值运算符、条件运算符、逗号运算符、求字节数运算符和一些特殊运算符。用运算符和括号将运算对象(也称为操作数)连接起来并符合C语法规则的式子称为表达式;C语言有算术表达式、赋值表达式、逗号表达式、关系表达式、逻辑表达式等。
C运算符的优先级有15级(具体内容见相关通用C语言书籍),在表达式求值时,按运算的优先级由高至低的次序运算(例如先乘除后加减),若在一个运算分量的两侧出现两个相同优先级的运算待时,则按运算符的结合性处理。有的运算符具有左结合特性,按自左至右的次序计算;有的运算符具有右结合特性,按自右至左的次序运算。
例如:公式x-y+z:y两侧的“-”“+”运算符具有相同优先级,都具有左结合性,因此先计算x-y,后计算+z,相当于(x-y)+z。
1.算术运算符和算术表达式
(1)算术运算符。
1)+(加)、-(减)、*(乘)、/(除)运算符。都是双目运算符,即有两个量参与运算,都具有左结合特性;另外,两个整数相除结果为整数。
2)%(求余数运算符,也称模运算)运算符。为双目运算符,参与运算的两个量都必须是整型数,结果为两数相除以后的余数。
3)+(取正)、-(取负)运算符。都是单目运算符,具有右结合特性,取正的含义是取运算分量的值,取负的含义是取运算分量符号相反的值。
4)++(自增1)、--(自减1)运算符都是单目运算符,都具有右结合特性,它们只能用于变量的加1或减1,++、--运算符可放在变量之前或变量之后,其含义有细微的差别:
(a)++i;--j; /*先使变量自i加1;变量自j减1,后使用变量i,j*/
(b)i++;j--; /*先使用变量i,j,后使变量i自加1,使变量j自减1*/
(2)算术表达式。由算术运算符、括号将运算对象连接起来的式子称为算术表达式。
例如:a、b、x、y都是整型变量,则下式
a+b、a*2/x、(x+y)*8都是算术表达式
2.位运算符和位运算
位运算符的功能是对数据进行按位运算,使之能对单片机的硬件直接进行位操作,位运算符只能用于字符型和整型数据,不能用于浮点数。C51共有以下6种位运算符。
(1)按位与运算符&。参与运算的两个数据按位进行逻辑与运算,仅当两个数据的对应位都为1时,结果的相应位为1;否则结果为0。其功能相当于51系列的ANL逻辑与指令。
利用按位与操作,可以使变量的某些位清零。例如:
P1=P1&0xfe; /*清零P1.0*/
(2)按位或运算符|。参与运算的两个数据按位逻辑或运算,只要两个数据的对应位中有一个为1,结果的相应位为1;仅当对应位都为0时,结果才为0。功能相当于51系列的ORL逻辑或指令。
利用按位或操作,可以使变量的某些位置1。例如:
P1=P1|0xl; /*置位Pl.0*/
(3)按位异或^。参与逻辑运算的两个数据对应位相同时,结果的相应位为0;不同时结果为1。功能相当于51指令XOR逻辑异或指令。利用按位逻辑异或运算可以使变量的某些位求反。例如:
P1=P1^1: /*使P1.0求反,而P1的其他位保持不变*/
(4)按位取反运算符~。按位取反运算符~是单目运算符,其功能是使一个数据的各个位求反。例如:无符号整型变量a=0x7ff0,则:(www.xing528.com)
b=~a; /*使b的值为0x800f*/
(5)左移运算符<<。其功能是将一个数的各位左移若干位,高位溢出舍去,低位补充0。例如:一个无符号整型变量a乘于2n(n<16),可用左移n位实现:
b=a<<4: /*其功能是使b等于a乘以16*/
(6)右移运算符>>。其功能是将一个数据的各位右移若干位,对于无符号整数高端移入0,低端移出舍去;如果是有符号整数,高端移入原来数据的符号位,其右端移出位被舍去。对于无符号整型变量除以2n(n<16),可用右移n位实现。
b=a>>4; /*其功能是使b等于a除以16*/
3.赋值运算符和赋值表达式
(1)赋值运算符和赋值表达式。赋值运算符的符号为“=”,其优先级别很低,仅仅高于最低优先级别的“,”逗号运算符。由赋值运算符将一个变量和一个表达式连起来称为赋值表达式,其一般形式为:
变量=表达式;
其功能是将表达式的值赋给变量,例如:
赋值运算符具有右结合特性,因此a=b=c=5;等价于a=(b=(c=5));
如果赋值运算符两边的数据类型不相同,编译器自动将右边表达式值的类型转换为和左边变量相同的类型。
(2)复合赋值运算符及表达式。在赋值运算符“=”的前面加上其他双目运算符,就构成复合赋值运算符。c的复合赋值运算符有如下十种:
+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
由复合运算符将一个变量和表达式连起来也构成赋值表达式。一般形式为:
变量 双目运算符=表达式;
例如:
4.逗号运算符和逗号表达式
“,”逗号是C的一种特殊运算符,其功能是把几个表达式连接起来,组成(逗)号表达式,一般形式为:
表达式1,表达式2,…,表达式n;
逗号表达式的功能是依次计算表达式1,表达式2,…,表达式n的值,整个逗号表达式的值为表达式n的值。例如:
i=0,j=3;
依次将0赋值给i,3赋值给j,整个表达式值为3。
另外,逗号表达式在for(;;)循环控制语句中用于对循环变量的初始化。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。