二、運算子的分類
三、運算子優先順序(運算順序)排序
具有一定的運算規則的符號,對資料的一種操作 2+3- 3*5= 5
運算子要操作的資料就是運算元
運算子跟運算元組合的式子就叫做表示式
不同運算子組合在一起使用的時候,對資料的先後處理順序
在同乙個優先順序的情況下,對資料處理的先後順序
賦值運算子符號:=
a=b;
原理: 將右邊的資料賦給左邊的變數(左邊必須是變數)
注意: 資料在做賦值運算的時候,要注意資料型別是一樣的
如果兩邊的資料型別不一樣,此時就會發生資料型別的轉換
優先順序 : 比逗號運算子的優先順序高
結合性 :從右到左
算數運算子符號: + - * / %(求餘/取模)
除法 /
a) 當除號兩邊都是整數的時候,結果自動取整
10/3=3
b) 當除號兩邊只要有一邊浮點型資料的時候,結果會取到準確值
10.0/3=3.333333
注意:驗證的時候,注意資料型別的轉換,結果用浮點型資料型別的變數接收
求餘 %
a)原理:% 運算子兩邊必須是整數
如果不是整數,必須做資料型別的轉換
b)用途: 用來做位數的分離
123
123%10 結果是3
123/10%10結果是2
123/100結果是1
d)優先順序:* / % 高於 + -
算數運算子的優先順序高於賦值運算子
e)結合性:從左往右
關係運算子符號: > < >= <= != ==
對於資料:只要是非0值都是真值
a)由關係運算子組成的式子,叫做關係表示式
b)關係表示式的結果只有兩種,0 或 1(邏輯結果真)
c)形式: 表示式1 關係運算子 表示式2
假如: 2<3
d)注意:判斷兩個表示式是否相等,用 ==
e)如果表示式裡面有運算子的時候,注意,優先順序,先執行優先順序高的
f)優先順序: > < >= <= 高於 != ==
從上往下,優先順序降低:
算數運算子的優先順序
關係運算子
賦值運算子
g) 結合性:從左往右
h) 用途:用在迴圈語句,條件語句,進行判斷
按位運算子符號: &(按位與) ^(按位異或) |(按位或) ~(按位取反)
<<(按位左移) >>(按位右移)
a)說明:在做按位運算的時候,需要將資料轉換成二進位制,再進行相關的運算
資料是以補碼的形式儲存在記憶體中的:
對於正數來說,它的補碼就是它的原碼
對於負數來說,它的補碼就是它原碼除了符號位之外,其他位取反加1
注意:凡是做按位運算的時候,必須將資料轉換成二進位制來進行運算
b)按位與 : &
形式: 表示式1 & 表示式2
規則: 全1為1,有0為0
c)按位異或: ^
形式: 表示式1 ^ 表示式2
規則: 相同為0,相異為1
d)按位或 : |
形式: 表示式1 | 表示式2
規則: 全0為0,有1為1
e)按位取反: ~
規則:0變1,1變0
注意: 按位取反是單目運算子
補充:單目運算子跟雙目運算子的區別:
單目運算子:根據運算元的數目來區分
如果只有乙個運算元:單目運算子
如果有兩個運算元:雙目運算子
如果有三個運算元:三目運算子
例子:
int a=
0x34
;0000
0000
0000
0000
0000
0000
0011
0100
~a;1111
1111
1111
1111
1111
1111
1100
1011
ffffffcb
char b=
0x34
~b;
f)按位左移 <<
規則:整體左移,高位溢位,低位補零
方法:整體左移的時候,相對於乘以2,(必須符合資料的取值範圍)
例:b左移n 相對於b*2^n
g)按位右移 >>
規則:整體右移,低位溢位,高位位補零
方法:整體右移的時候,相對於除以2,(必須符合資料的取值範圍)
優先順序:~ 高於 << >> 高於 & 高於 ^ 高於 |
結合性:單目運算子:從右往左
雙目運算子:從左往右
邏輯運算子符號:&& || !
1)邏輯與:&&
形式: 表示式1 && 表示式2
原理: 兩個表示式的結果都是真值,則整體表示式的結果就是真值
注意:如果表示式1的結果是真值,則再去判斷表示式2的結果
如果表示式1的結果是假值,不會去判斷表示式2
2)邏輯或:||
形式: 表示式1 ||表示式2
原理: 兩個表示式的結果有乙個為真,則整體表示式的結果就是真值
注意: 如果表示式1的結果是真值,則不會再去判斷表示式2的結果
如果表示式1的結果是假值,則再去去判斷表示式2
3)邏輯非:!
形式:!表示式1
原理:真變假,假變真
注意:邏輯非 是單目運算子
4)優先順序: ! 高於 && 高於 ||
結合性: 單目運算子:從右往左
&& || : 從左往右
自增自減運算子符號: ++ –
原理:本身會自增1
分類:分為前置跟後置
前置:int a; ++a 在變數的前面
規則:變數先自增,後使用,
a=1, b=++a;
後置:a++ 在變數的後面
規則:變數先使用後自增
注意:只有變數才會發生自增自減,
不管是前置還是後置,變數最終都會加1
對於前置,變數先加在使用,int a, b=++a ;
對於後置,變數先使用在自增,變數只有在一條語句結束之後才會發生自增
b=a++
; a=1b=
(a++)+
(b=a)
;//b=1+1 a=2
優先順序:單目運算子
結合性:從右往左
補充:1)自增,自減,在printf函式裡面,結合性是從右往左
printf(「a = %d b = %d\n」,a++, ++a); 先計算後面的,在計算前面的
2)在前置和後置同時出現的時候,前置會影響後置,後面在出現前置和後置的時候就不會發生變化了。
前置和前置同時出現的時候,也會受影響
解釋:不同的編譯器,所造成的影響是不同的,根據編譯器而定
b=
(a++)+
(++a)
+(a++)+
(++a)
+(a++);
//1+2+2+3+3=11 實際結果是12
//a=6d=(
++c)+(
++c)
;//2+3 實際結果是6
//c=3
三目運算子符號 ?:
形式:(條件表示式)?表示式1:表示式2
原理:先判斷條件表示式,如果條件表示式為真,則整體表示式的結果就是表示式去的結果;如果條件表示式為,則整體的表示式的結果就是表示式2的結果
本質: 三目運算子
優先順序:單目運算子 高於 雙目運算子 高於 三目運算子
結合性:從左往右
復合賦值運算子:
形式: += -= /= …
原理:a+=b; a=a+b
注意:!= >= <=
運算子本身帶有賦值運算子的不是復合賦值運算子
優先順序:跟賦值運算子的優先順序一樣
結合性:從左往右
逗號運算子:
形式:(表示式1,表示式2,…表示式n);
原理:先計算表示式1,然後在計算表示式2,一直到表示式n,
最終整個表示式的結果是表示式n的結果
優先順序:最低
結合性:從左往右
運算子優先順序的高低,從上往下,優先順序依次降低
括號 : () {} . ->
單目運算子 : ~ ! ++ –
指標運算子 : * &
算數運算子: * / % + -
按位運算子: << >>
關係運算子:> < >= <= != ==
按位運算子:& ^ |
邏輯運算子:&& ||
三目運算子: ?:
(符合)賦值運算子 : = += -= %= …
逗號運算子 : ,
C語言 運算子與 運算子
我們平時使用帶參巨集時,字串中的巨集引數是沒有被替換的。例如 輸出結果為 然而,我們期望輸出的結果是 5 20 2513 14 27 這該怎麼做呢?其實,c語言允許在字串中包含巨集引數。在類函式巨集 帶參巨集 中,號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果a是乙個巨集形參,那麼 a就是...
C語言 運算子和 運算子
變數 代表 取變數的位址 變數 代表 指標型的變數 取址運算子 用來取得其運算元的位址。如果運算元 x 的型別為 t,則表示式 x 的型別是 t 型別指標 指向 t 的指標 取址運算子的運算元必須是在記憶體中可定址到的位址。換句話說,該運算子只能用於函式或物件 例如左值 而不可以用於位欄位,以及那些...
C語言運算子
1級優先順序左結合 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子 字尾增量運算子 字尾增量運算子 2級優先順序右結合 邏輯非運算子 按位取反運算子 字首增量運算子 字首增量運算子 負號運算子 型別 型別轉換運算子 指標運算子 位址與運算子 sizeof 長度運算子 3級優先順序左結合 ...