運算符
運算符類型 | 說明 | 運算符類型 | 說明 |
算術運算符 | + − * / % | 指針運算符 | * & |
關係運算符 | > < == >= <= ! = | 求字節數運算符 | sizeof |
邏輯運算符 | ! && || | 強制類型轉換運算符 | (類型) |
位運算符 | << >> ^ | & ~ | 分量運算符 | . → |
賦值運算符 | = 及其擴展賦值運算符 | 下標運算符 | [] |
條件運算符 | ? : | 其他 | 如函數調用運算符() |
逗號運算符 | , |
算數運算符
運算符 | 描述 | 結合性 |
+ | 單目正 | 從右至左 |
− | 單目負 | 從右至左 |
* | 乘 | 從左至右 |
/ | 除和整除 | 從左至右 |
% | 取模(取餘) | 從左至右 |
+ | 雙目加 | 從左至右 |
− | 雙目減 | 從左至右 |
關係運算符
運算符 | 功能說明 | 示例 |
> | 大於 | a > b或a > 5 |
>= | 大於等於 | a >= b或a >= 5 |
< | 小於 | a < b或a < 5 |
<= | 小於等於 | a <= b或a <= 5 |
== | 等於 | a == b或a == 5 |
!= | 不等於 | a != b或a != 5 |
邏輯運算符
- 與運算(&&):
雙目運算符,只有兩個運算量都是1時,運算結果才爲1,左結合型
左運算量 | 右運算量 | &&運算結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
- 或運算(||):
雙目運算符,只要有一個運算量爲1,結果就爲1,左結合型
左運算量 | 右運算量 | 運算結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
- 非運算(!)
單目運算符,當運算量進行非運算,結果會取反,右結合性
運算量 | !運算結果 |
---|---|
0 | 1 |
1 | 0 |
位運算符
運算符 | 功能說明 | 示例 |
~ | 位邏輯反 | ~a |
& | 位邏輯與 | a&b |
| | 位邏輯或 | a|b |
^ | 位邏輯異或 | a^b |
>> | 右移位 | a>>1 |
<< | 左移位 | b<<4 |
- 非運算(~)
單目運算符,當運算量進行非運算,結果會取反
運算量 | ~運算結果 |
---|---|
0 | 1 |
1 | 0 |
- 與運算符(&)
- 雙目操作符,當兩個位進行相與時,只有兩者都爲“1”時結果才爲“1”。
左運算量 | 右運算量 | &運算結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
- 或運算符(|)
- 雙目操作符,當兩個位進行相或時,兩者中只要有一方爲“1”,結果就爲“1”
左運算量 | 右運算量 | 運算結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
- 異或運算符(|)
- 雙目操作符,當兩個位進行異或時只要兩者相同,結果就爲“0”,否則結果爲“1”
左運算量 | 右運算量 | ^運算結果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
- 位移位運算
<運算量> <運算符> <表達式>其中:
- <運算量> 必須爲整型結果數值;
- <運算符>爲左移位(<<)或 右移位(>>)運算符;
- <表達式> 也必須爲整型結果數值。
賦值運算符
運算符 | 功能說明 | 示例 |
+= | 加賦值複合運算符 | a += b 等價於a = a + b |
-= | 減賦值複合運算符 | a -= b 等價於a = a - b |
*= | 乘法賦值複合運算符 | a *= b 等價於a = a * b |
/= | 除法賦值複合運算符 | a /= b等價於a = a / b |
%= | 求餘賦值複合運算符 | a %= b 等價於a = a % b |
&= | 位與賦值複合運算符 | a &= b 等價於a = & b |
|= | 位或賦值複合運算符 | a |= b等價於a = a | b |
^= | 位異或賦值複合運算符 | a ^= b等價於a = a ^ b |
>>= | 位右移賦值複合運算符 | a >>= b 等價於a = a >> b |
<<= | 位左移賦值複合運算符 | a <<= b 等價於a = a << b |
特殊運算符
條件運算符“?:”
- 是三目運算符,其運算的一般形式是:
- <表達式1>?<表達式2>:<表達式3>
<表達式1>?<表達式2>:<表達式3>
關係如下:
if(表達式1)
表達式2
else
表達式3
#include <stdio.h>
int main(int argc, char *argv[])
{
int x = 70, y = 10;
//y = x++ > 70 ? x + y : 5;
y = ++x > 70 ? x + y : 5;
printf("x=%d y = %d\n", x, y);
return 0;
}
逗號運算符“,”
float x = 10.5, y = 18, z = 0;
z = (x += 5, y = x + 0.2)
z賦值爲15.7, x賦值爲15.6, y賦值爲15.7
z = (x = y = 5, x += 1)
z賦值爲6, x賦值爲6, y賦值爲5
z = (x = 5, y = 6, x + y)
z賦值爲11, x賦值爲5, y賦值爲6
z = (z = 8,x = 5, y = 3)
z賦值爲3, x賦值爲5, y賦值爲3
sizeof操作符
- 單目運算符,它的運算對象是變量或數據類型,運算結果爲一個整數
- sizeof(<類型或變量名>)
運算符優先級
運算符的優先級和結合性
優 先 級 | 運 算 符 | "含義" | 運算對象個數 | 結 合 方 向 |
1 | () | 圓括號 | 自左向右 | |
[] | 下標運算符 | |||
−> | 指向結構體成員運算符 | |||
. | 結構體成員運算符 | |||
2 | ! | 邏輯非運算 | 1(單目) | 自右向左 |
~ | 按位取反運算 | |||
++ | 自增運算符 | |||
− − | 自減運算符 | |||
− | 負號運算符 | |||
(類型) | 類型轉換運算符 | |||
* | 指針運算符 | |||
& | 地址運算符 | |||
sizeof | 長度運算符 | |||
3 | * | 乘法運算符 | 2(雙目) | 自左向右 |
/ | 除法運算符 | |||
% | 求餘運算符 | |||
4 | + | 加法運算符 | 2(雙目) | 自左向右 |
− | 減法運算符 | |||
5 | << | 左移運算符 | 2(雙目) | 自左向右 |
>> | 右移運算符 | |||
6 | < | 關係運算符 | 2(雙目) | 自左向右 |
<= | ||||
> | ||||
>= | ||||
7 | = = | 等於運算符 | 2(雙目) | 自左向右 |
!= | 不等於運算符 | |||
8 | & | 按位與運算符 | 2(雙目) | 自左向右 |
9 | ^ | 按位異或運算符 | 2(雙目) | 自左向右 |
10 | | | 按位或運算符 | 2(雙目) | 自左向右 |
11 | && | 邏輯與運算符 | 2(雙目) | 自左向右 |
12 | || | 邏輯或運算符 | 2(雙目) | 自左向右 |
13 | ? : | 條件運算符 | 3(三目) | 自右向左 |
14 | = | 賦值運算符 | 2(雙目) | 自右向左 |
+= | ||||
−= | ||||
*= | ||||
/= | ||||
%= | ||||
>>= | ||||
<<= | ||||
&= | ||||
^= | ||||
|= | ||||
15 | , | 逗號運算符 | 自左向右 | |