1. 程式人生 > >四、學習筆記,C語言—運算子

四、學習筆記,C語言—運算子

目錄

運算子

運算子型別 說明 運算子型別 說明
算術運算子 + − * / % 指標運算子 * &
關係運算符 > < == >= <= ! = 求位元組數運算子 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 逗號運算子 自左向右