1.4.3 运算符
单片机C语言的运算符可分为算术运算符、关系运算符、逻辑运算符、位运算符和复合赋值运算符。
1.算术运算符
单片机C语言的算术运算符见表1-5。在进行算术运算时,按“先乘除模,后加减,括号最优先”的原则进行,即乘、除、模(相除求余)运算优先级相同,加、减优先级相同且最低,括号优先级最高,在优先级相同时,运算按先后顺序进行。
表1-5 单片机C语言的算术运算符
在采用单片机C语言编程时,经常会用到加1符号“++”和减1符号“--”,这两个符号使用比较灵活。常见的用法如下。
y=x++(先将x赋给y,再将x加1);
y=x--(先将x赋给y,再将x减1);
y=++x(先将x加1,再将x赋给y);
y=--x(先将x减1,再将x赋给y);
x=x+1可写成x++或++x;
x=x-1可写成x--或--x;
%为模运算,即相除求余数运算,如9%5结果为4;
^为乘幂运算,如2^3表示2的3次方(23),2^2表示2的平方(22)。
2.关系运算符
单片机C语言的关系运算符见表1-6。<、>、<=和>=运算优先级高且相同,==、!=运算优先级低且相同,如“a>b!=c”相当于“(a>b)!=c”。
表1-6 单片机C语言的关系运算符
用关系运算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式或字符表达式)连接起来的式子称为关系表达式,关系表达式的运算结果为一个逻辑值,即真(1)或假(0)。
例如,a=4、b=3、c=1,则
a>b的结果为真,表达式值为1;
b+c<a的结果为假,表达式值为0;
(a>b)==c的结果为真,表达式值为1,因为a>b的值为1,c值也为1;
d=a>b,d的值为1;
f=a>b>c,由于关系运算符的结合性为左结合,a>b的值为1,而1>c的值为0,所以f值为0。
3.逻辑运算符
单片机C语言的逻辑运算符见表1-7。&&、||为双目运算符,要求有两个运算对象,!为单目运算符,只要求有一个运算对象。&&、||运算优先级低且相同,!运算优先级高。
表1-7 单片机C语言的逻辑运算符
与关系表达式一样,逻辑表达式的运算结果也为一个逻辑值,即真(1)或假(0)。
例如,a=4、b=5,则
!a的结果为假,因为a=4为真(a值非0即为真),!a为假(0);
a||b的结果为真(1);
!a&&b的结果为假(0),因为!的优先级高于&&,故先运算!a的结果为0,而0&&b的结果也为0。
在进行算术、关系、逻辑和赋值混合运算时,其优先级从高到低依次为:!(非)→算术运算符→关系运算符→&&和||→=(赋值运算符)。
4.位运算符
单片机C语言的位运算符见表1-8。位运算的对象必须是位型、整型或字符型数,不能为浮点型数。
表1-8 单片机C语言的位运算符
位运算举例见表1-9。
表1-9 位运算举例
5.复合赋值运算符
复合赋值运算符就是在赋值运算符“=”前面加上其他运算符,单片机C语言常用的复合赋值运算符见表1-10。
表1-10 单片机C语言常用的复合赋值运算符
复合赋值运算中变量与表达式先按运算符运算,再将运算结果值赋给参与运算的变量。凡是双目运算(两个对象参与运算),都可以采用复合赋值运算符去简化表达。
复合赋值运算的一般形式为
变量 复合赋值运算符 表达式
例如,a+=28相当于a=a+28。