(一) 算術運算符
1. 常用算術運算符
算術運算符用於執行程序中的數學運算,C 語言中常用的算術運算符有以下 5 種:
-
加或正值
-
減或負值
-
* 乘
-
/ 除
-
% 取余
-
加法或者正值運算符“+”。作為加法運算符時是雙目運算符,也就是需要有 2 個操作數參與運算,例如:a+b、1+3 等。如果作為正值運算符時是單目運算符,例如:+3、+1 等。參與加法運算的操作數可以是字面量、也可以是變量:
#include<stdio.h> int main() { int a=10; int b=20; printf("a+b=%d\n",a+b);//變量相加 printf("a+1=%d\n",a+1);//變量與常量相加 printf("1+1=%d\n",1+1);//字面量與字面量相加 printf("%d\n",+a); printf("%d\n",+100); getchar(); return 0; }
-
減法或者負值運算符“-”。
-
乘法運算符“*”。
-
除法運算符“/”。
【注意】兩個整數相除結果為整數,兩個浮點數相除結果為浮點數,如果兩個操作數中有一個是浮點數,相除結果為浮點數,示例代碼如下:
#include<stdio.h> int main() { int i=5; int j=3; float f = i/j; //i/j 的值賦值給 f float f1=5.0f; float f2=3.0f; float f3=f1/f2; printf("%lf\n",f); printf("%lf\n",f3); getchar(); return 0; } 運行結果: 1.000000 1.666667
不僅僅是除法,幾乎所有運算都是:整數和整數運算結果是整數;整數和小數運算結果是小數;小數和小數的運算結果是小數。
-
求余運算符“%”,屬於雙目運算符,要求參與運算的兩個操作數都必須是整數,求余運算的結果是兩個數相除的余數,示例代碼如下:
#include<stdio.h> int main() { int a=6; int b=20; printf("%d\n",b%a); getchar(); return 0; }
2. 算術表達式
將算術運算符、小括號、操作數連接起來、符合 C 語言規則的式子被稱為算術表達式,參與運算的操作數可以是字面量、變量、函數等。例如:a+1、a-b、1*10、20/2、30%4…..等等。
3. 算術運算符優先級
在數學中,算術運算有一套完整的運算規則。在 C 語言中,算術運算同樣存在着規則。當算術表達式由多個不同的算術運算符組成時,會按照運算符的優先級進行運算:先乘除后加減、先括號里再括號外,優先級相同,按照自左向右的順序進行運算,例如:a*10+(100%3)-b/10。
小括號優先級最高,先計算(100%3)。*與/優先級相同,自左向右運算,先計算 a*10,再計算 b/10。+與-優先級相同,自左向右運算,先計算加法,再計算減法。
和數學中一樣,可以通過小括號()來改變運算優先級,不過 C 語言中只有(),沒有[]、{},()可以嵌套多層。a*(10+100%(3-b)/10);
(二) 賦值運算符和賦值表達式
1. 賦值運算符
賦值運算符“=”,是 C 語言中使用最多的運算符,作用是將一個值(字面量值、變量值、表達式計算結果)復制一份給另一個變量。賦值運算符常見形式:
變量 = 表達式;
a = 1+1; //先計算表達式 1+1,然后將結果值賦給變量 a
變量 = 字面量;
a= 2; //將數值 2 直接賦值給變量 a
變量 = 變量;
a= b; //將變量 b 的值賦值給變量 a
示例代碼如下:
#include<stdio.h>
int main()
{
int a;
int b;
int c;
a=20; //將數值 20 賦值給變量 a
b=a-10; //先計算 a-10,然后將計算結果賦值給變量 b
c=a+b; //先計算 a+b,然后將計算結果賦值給變量 c
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
getchar();
return 0;
}
【注意】
賦值運算符的右邊必須是變量,以下寫法都是錯誤的:
20=30; //錯誤寫法
100=a; //錯誤寫法
左邊也不能是表達式:a+2=5; 這樣也錯。
2. 賦值表達式
將賦值運算符、小括號、操作數連接起來、符合 C 語言規則的式子被稱為賦值表達式,參與運算的操作數可以是字面量、變量、表達式、函數……等。例如:a= 1+1、a=2、a=a+1、a=b 等等。
b=a+1 的讀法是“a+1 的值賦值給 b”,很顯然 a=a+1 的讀法是“a+1 的值賦值給 a”
3. 賦值運算符優先級
賦值運算符在 C 語言中優先級是最低的。賦值運算都是最后執行,例如:
c=a*10+100%3-b/10;
上述程序中,既有算術運算符,又有賦值運算符。因為賦值運算符優先級是最低的,因此可以將上述程序分為 2 部分看待,先執行=右邊的算術表達式,然后將計算結果賦值給=左邊的變量 c。
4. 賦值表達式的結果
前面講過,C 語言中任何一個表達式都會產生一個結果值,賦值表達式也是如此。賦值表達式的結果就是=左邊被賦值變量的值,例如:
int a=10;
int c =(a=a+1);
printf("%d\n",c);
printf("%d\n",c=c+1);
5. 復合賦值運算符
在賦值運算符前加上其他運算符,就可以構成復合運算符。例如:在“=”前加一個“-”就構成復合運算符“-=”。在 C 語言中,常用的復合賦值運算有以下幾種:
a+=10; //等價於 a=a+10;
a-=10; //等價於 a=a-10;
a*=10; //等價於 a=a*10;
a/=10; //等價於 a=a/10;
a%=10; //等價於 a=a%10;
(三) 自增(++)、自減(--)運算符
1. 自增(++)運算符
自增運算符“++”由 2 個“+”組成,作用是將變量值增加 1,在 C 語言中,“++”的位置不同表達的意思也不相同,需要分 2 種情況:
++x; //x 先自增 1,然后再參加運算
x++; //x 先參與運算,然后自增 1
示例代碼如下:
#include<stdio.h>
int main()
{
int a=1;
a++;
printf("a=%d\n",a);
getchar();
return 0;
}
運行結果:
a=2
#include<stdio.h>
int main()
{
int a=1;
++a;
printf("a=%d\n",a);
getchar();
return 0;
}
運行結果:
a=2
這樣,a++和++a 都相當於 a=a+1,后面講差別。
2. 自增運算表達式
將自增運算符、小括號、操作數連接起來、符合 C 語言規則的式子被稱為自增運算表達式,參與運算的操作數只能是變量,不能是字面量、表達式等。
以下都是錯誤寫法:
++100 //錯誤寫法,不能是字面量
(a+1)++ //錯誤寫法,不能是表達式
前面講過,“++”的位置不同表達的意思也不相同,下面通過例子來深入了解一下:
#include<stdio.h>
int main()
{
int a=1;
int b=0;
b=a++; //后++
printf("a=%d\n",a);
printf("b=%d\n",b);
getchar();
return 0;
}
運行結果:
a=2
b=1
#include<stdio.h>
int main()
{
int a=1;
int b=0;
b=++a; //前++
printf("a=%d\n",a);
printf("b=%d\n",b);
getchar();
return 0;
}
運行結果:
a=2
b=2
我們知道,C 程序中表達式都會返回一個結果值,自增運算表達式也是如此。如果是“變量++”,返回變量自加之前的值;如果是“++變量”,返回變量自加之后的值。因此,上述程序中,b=a++和 b=++a 執行過程等價於以下形式:
b=a++等價於 | b=++a 等價於 |
---|---|
b=a; a=a+1; |
a=a+1; b=a; |
3. 自減(--)運算符
自減運算符“--”由 2 個“-”組成,作用是將變量值減少 1。
也分為 i--、--i 的區別。和++類似。
(四) 關系運算符與關系表達式
1. 關系運算符
關系運算符又稱“比較運算符”用於執行程序中的比較運算。C 語言中所有關系運算符都是雙目運算符,也就是說需要兩個操作數參與運算,常用的關系運算符有以下 6 種:
< 小於
<= 小於或等於大於
= 大於等於
== 等於
!= 不等於
注意<=、>=別寫反了。
2. 關系表達式
將關系運算符、小括號、操作數連接起來、符合 C 語言規則的式子被稱為關系表達式,
參與運算的操作數可以是字面量、變量、表達式、函數……等。例如:
1>2 //1 是否大於 2
1+1==b //1+1 的結果是否等於變量 b
10*20!=c //10 乘 20 的結果是否不等於變量 c
關系表達式的運算結果只有 2 種:0 或 1。0 表示關系表達式為假,1 表示關系表達式為
真。例如:
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int c=30;
printf("%d\n", 1 > 2);
printf("%d\n", 5 >= 2);
printf("%d\n", a < 2);
printf("%d\n", a <= b);
printf("%d\n", a+b == c);
printf("%d\n", c != a+b);
getchar();
return 0;
}
關系表達式的結果值是整數類型,因此采用%d 格式輸出。
printf("%d\n",a==b);
printf("%d\n",a=b);
不要把 a==b 寫成 a=b,a=b 就是賦值表達式
(五) 邏輯運算符與邏輯表達式
1. 邏輯運算符
邏輯運算符用於對程序中的邏輯值進行運算。在日常生活中邏輯值只有 2 種:“真”或“假”。但是 C 語言中沒有邏輯類型,為了解決這個問題,采用 0 代表邏輯“假”,非 0代表邏輯“真”。
舉個例子:“李小龍是男人”是“真”,“李小龍是德國人”是“假”。
“李小龍是男人 並且 李小龍是德國人”是“假”,“李小龍是男人 或者 李小龍是德國人”是“真”。
C 語言提供的邏輯運算符有以下 3 種:
&& 邏輯與(並且)
|| 邏輯或(或者)
! 邏輯非
邏輯與(&&)和邏輯或(||)都是雙目運算符,需要兩個操作數才能進行運算。邏輯非(!)是
單目運算符,只需一個操作數即可進行運算。
C 語言邏輯運算符表示的含義如表所示:
運算符 | 名稱 | 舉例 | 說明 |
---|---|---|---|
&& | 邏輯與 | a&&b | a 和 b 都為真,結果為真,否則為假 |
|| | 邏輯或 | a||b | a 或 b 有一個為真,結果為真。a 和 b 都為假時,結果才為假 |
! | 邏輯非 | !a | a 為假,!a 結果為真;a 為真,!a 結果為假 |
2. 邏輯表達式
將邏輯運算符、小括號、操作數連接起來、符合 C 語言規則的式子被稱為邏輯表達式,
參與運算的操作數可以是字面量、變量、表達式……等。例如:
1 && 1
a&&1
a || b
1 ||b
1>2 && 3<4
!a
(六) 條件運算符與條件表達式
條件運算符由“?”與“:”兩個符號組成,必須一起使用,是 C 語言中唯一的三目運算符,需要三個操作數才能進行運算。
條件表達式的一般使用形式為:
表達式 1?表達式 2:表達式 3
條件表達式的運算規則為:如果表達式 1 的結果為真,以表達式 2 的值作為整個條件表達式的值,否則以表達式 3 的值作為整個條件表達式的值。例如:
max=a>b?a:b
如果 a>b 為真,將 a 賦值給 max,否則將 b 賦值給 max。a>b?a:b 被稱為條件表達式。
一般為了代碼結構清晰,建議使用小括號將條件運算表達式包裹起來,比如:max=(a>b?a:b)。
下面通過例子來了解一下條件運算符的使用。
#include<stdio.h>
int main()
{
int a=9;
int b=0;
b=(a>10?888:666);
printf("b=%d\n",b);
b=(a>5?888:666);
printf("b=%d\n",b);
getchar();
return 0;
}
//使用條件運算符判斷數據能否被 3 整除。
#include<stdio.h>
int main()
{
printf("%s\n",(6%3==0)?"6 能被 3 整除":"6 不能被 3 整除");
printf("%s\n",(5%3==0)?"5 能被 3 整除":"5 不能被 3 整除");
getchar();
return 0;
}
(七) sizeof 運算符
求字節數運算符“sizeof”用於計算變量、字面量、類型所占字節數。該運算符是 C 語言中唯一一個使用單詞作為運算符的:
sizeof(類型)、sizeof(字面量)、sizeof(變量)
上述表達式的運算結果為:括號中的類型在當前系統下所占字節數。
下面通過 sizeof 計算 C 語言中常用數據類型所占字節數。
sizeof 計算類型所占字節數
#include<stdio.h>
int main()
{
printf("sizeof(char) =%d\n", sizeof(char));
printf("sizeof(int) =%d\n", sizeof(int));
printf("sizeof(float) =%d\n", sizeof(float));
printf("sizeof(double) =%d\n", sizeof(double));
getchar();
return 0;
}