四、學習筆記,C語言—運算子
阿新 • • 發佈:2018-12-12
目錄
運算子
運算子型別 | 說明 | 運算子型別 | 說明 |
算術運算子 | + − * / % | 指標運算子 | * & |
關係運算符 | > < == >= <= ! = | 求位元組數運算子 | 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 | , | 逗號運算子 | 自左向右 | |