比如:
1+2*3-10
其中,1、2、3和10稱為操作數(shù),+、 *和-稱為運算符。
上面的表達式先進行*運算,再進行+運算和-運算,這是因為運算符的優(yōu)先級不同,*的優(yōu)先級高于+和-,所以先進行*運算。
進行-運算時,是7減10,而不是10減7,這是由運算符的結(jié)合性決定的,-運算符的結(jié)合性是從左到右。
運算符不僅具有不同的優(yōu)先級,還有不同的結(jié)合性。在表達式中,各運算量參與運算的先后順序不僅要遵守運算符優(yōu)先級別的規(guī)定,還要受運算符結(jié)合性的制約,以便確定是自左向右進行運算還是自右向左進行運算。
C語言的運算符可分為以下幾類,見表2-9所示:
表2-9 運算符的類型說明
表達式是由常量、變量、函數(shù)和運算符組合起來的式子。一個表達式有一個值及其類型,它們分別是計算表達式所得結(jié)果的值和類型。表達式求值按運算符的優(yōu)先級和結(jié)合性規(guī)定的順序進行,單個的常量、變量、函數(shù)可以看作是表達式的特例。C語言中各運算符的優(yōu)先級和結(jié)合性見附錄C。
1.一般算術運算符
C語言基本算數(shù)運算符如表2-10所示:
表2-10 基本運算符
雙目運算符+和-具有相同的優(yōu)先級,它們的優(yōu)先級比運算符*、/和%的優(yōu)先級低,而運算符*、/和%的優(yōu)先級又比單目運算符-(負號)的優(yōu)先級低。
【例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;
}
程序運行結(jié)果:
2,-2
2.857143,-2.857143
本例中,20/7,-20/7的結(jié)果均為整型,小數(shù)全部舍去。而20.0/7和-20.0/7由于有實數(shù)參與運算,因此結(jié)果也為實型。
【例2-14】取余運算符
#include<stdio.h>
int main()
{
printf("%d\n",100%3);
return 0;
}
程序運行結(jié)果:
1
本例輸出100除以3所得的余數(shù)1。
2.自增、自減運算符
自增運算符(++)和自減運算符在C語言中使用比較頻繁,這兩個運算符有一個共同的特點,就是它們既可以出現(xiàn)變量的左邊,構(gòu)成前置++/--,又可以出現(xiàn)在變量的右邊,構(gòu)成后置++/--。
前置++/--的語法規(guī)則:現(xiàn)將變量的值加1/減1,再使用該變量。
后置++/--的語法規(guī)則:先使用該變量,再將變量的值加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;
}
程序運行結(jié)果:
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;
}
程序運行結(jié)果:
y=10,x=6
本例中,y等于整個逗號表達式的值,也就是表達式2的值,x是第一個表達式的值。
對于逗號表達式還要說明三點:
(1)逗號表達式一般形式中的表達式1和表達式2也可以又是逗號表達式。
例如:
表達式1, ( 表達式2, 表達式3 )
形成了嵌套情形,因此可以把逗號表達式擴展為以下形式:
表達式1, 表達式2, …表達式n
整個逗號表達式的值等于表達式n的值。
(2)程序中使用逗號表達式,通常是要分別求逗號表達式內(nèi)各表達式的值,并不一定要求整個逗號表達式的值。
(3)并不是在所有出現(xiàn)逗號的地方都組成逗號表達式,如在變量說明中,函數(shù)參數(shù)表中逗號只是用作各變量之間的間隔符。