比如:
1+2*3-10
其中,1、2、3和10称为操作数,+、 *和-称为运算符。
上面的表达式先进行*运算,再进行+运算和-运算,这是因为运算符的优先级不同,*的优先级高于+和-,所以先进行*运算。
进行-运算时,是7减10,而不是10减7,这是由运算符的结合性决定的,-运算符的结合性是从左到右。
运算符不仅具有不同的优先级,还有不同的结合性。在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算。
C语言的运算符可分为以下几类,见表2-9所示:
表2-9 运算符的类型说明
表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型,它们分别是计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行,单个的常量、变量、函数可以看作是表达式的特例。C语言中各运算符的优先级和结合性见附录C。
1.一般算术运算符
C语言基本算数运算符如表2-10所示:
表2-10 基本运算符
双目运算符+和-具有相同的优先级,它们的优先级比运算符*、/和%的优先级低,而运算符*、/和%的优先级又比单目运算符-(负号)的优先级低。
【例2-13】除法运算符
#include<stdio.h>
int main()
{
printf("\n\n%d,%d\n",20/7,-20/7);
printf("%f,%f\n",20.0/7,-20.0/7);
return 0;
}
程序运行结果:
2,-2
2.857143,-2.857143
本例中,20/7,-20/7的结果均为整型,小数全部舍去。而20.0/7和-20.0/7由于有实数参与运算,因此结果也为实型。
【例2-14】取余运算符
#include<stdio.h>
int main()
{
printf("%d\n",100%3);
return 0;
}
程序运行结果:
1
本例输出100除以3所得的余数1。
2.自增、自减运算符
自增运算符(++)和自减运算符在C语言中使用比较频繁,这两个运算符有一个共同的特点,就是它们既可以出现变量的左边,构成前置++/--,又可以出现在变量的右边,构成后置++/--。
前置++/--的语法规则:现将变量的值加1/减1,再使用该变量。
后置++/--的语法规则:先使用该变量,再将变量的值加1/减1。
【例2-15】使用自增、自减运算符
#include<stdio.h>
int main()
{
int i=8;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
return 0;
}
程序运行结果:
9
8
8
9
-8
-9
i的初值为8,第4行i加1后输出故为9;第5行减1后输出故为8;第6行输出i为8之后再加1(为9);第7行输出i为9之后再减1(为8) ;第8行输出-8之后再加1(为9),第9行输出-9之后再减1(为8)。
3.逗号运算符
在C语言中逗号“,”也是一种运算符,称为逗号运算符,其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:
表达式1,表达式2;
其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
【例2-16】逗号运算符举例
#include <stdio.h>
int main()
{
int a=2,b=4,c=6,x,y;
y=(x=a+b,b+c);
printf("y=%d,x=%d\n",y,x);
return 0;
}
程序运行结果:
y=10,x=6
本例中,y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。
对于逗号表达式还要说明三点:
(1)逗号表达式一般形式中的表达式1和表达式2也可以又是逗号表达式。
例如:
表达式1, ( 表达式2, 表达式3 )
形成了嵌套情形,因此可以把逗号表达式扩展为以下形式:
表达式1, 表达式2, …表达式n
整个逗号表达式的值等于表达式n的值。
(2)程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。
(3)并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。