一、算術運算子和表達式
1.1算數運算子
(+、-、*、/ 運算元可以是任意的基本數據型別,字元型數會自動的轉換成整數)
"+"單目正
"-"單目負
"*"乘
"/"除和整除(除數和被除數都是整型數時,結果只保留整數部分,小數部分捨棄,除數和被除數有一個是浮點數,進行浮點數相除)
"%"取餘/取模(兩個運算元只能是整數)
"+"雙目加
"-"雙目減
1.2算術表達式
1.2.1運算子的優先順序高到低:
1.2.2型別轉換
(1)自動型別轉換
(2)強制型別轉換
(型別名)表達式
高型別向低型別轉換可能有數據丟失,低型別向高型別一般只是形式上有改變而不影響數據的實質。
二、賦值運算子和表達式
2.1 賦值運算子
"="等號右邊的值賦給等號左邊
「+=」 加 a+=b等價於a=a+b(下方符號同理)
「-=」 減賦值複合運算子
「*=」 乘賦值
「/=」 除賦值
「%=」 求餘賦值
"&="位與賦值
"|="位或賦值
「^=」 位互斥或賦值
">>="位右移賦值
"<<="位左移賦值
2.2賦值表達式
變數=表達式
2.3特殊的賦值運算-自增自減
++變數
變數++
--變數
變數--
ps:運算子在運算元之前,c語言在參照運算元之前就先執行加1或減1操作,運算子在運算元之後,c語言就先參照運算元的值,而後再進行加 1或減1操作。
eg:
i=1;
(j=i++; 結果是i=2,j=1)
(j=++i; 結果是i=2,j=2)
(j=i--;結果是i=0,j=1)
(j=--i;結果是i=0,j=0)
2.3賦值中的型別轉換
當賦值運算子兩邊的運算物件型別不同時,發生型別轉換,把賦值運算子右邊的表達式型別轉換爲左側變數的型別。
三、逗號運算子和表達式
變數=表達式1,表達式2
求值過程是求每個表達式的值,變數的結果等於表達式2的結果
擴充套件:變數=表達式1,表達式2,表達式3…表達式n,結果是表達式n的值
四、位運算子和表達式
4.1位運算子
"&"與運算子,按位元相與,兩者都爲1結果爲1
"|"或
"^"互斥或
"~"取反
"<<"左移(左移n位,右邊n位補0)
">>"右移(邏輯移位:右移n位右邊n位補0,算術移位:右移n位,左邊n位原數值的符號位填充)
4.2位表達式
優先順序: ~ (>> <<) (& | ^)
位運算子高效
五、關係運算符和表達式
5.1關係運算符
(都是雙目運算子,結合性均爲左結合)
">"大於
">="大於等於
"<"小於
"<="小於等於
"=="等於
"!="不等於
5.2表達式
"> >= < <="優先順序高於等於和不等於
關係表達式:表達式 關係運算符 表達式
關係表達式的值只有兩種,真和假表示爲1和0
c語言中不存在bool型別的值,所以用0代表假,1代表真
六、邏輯運算子和表達式
6.1邏輯運算子
&&邏輯與
||邏輯或
!非
6.2邏輯表達式
表達式 邏輯運算子 表達式
七、sizeof操作符
sizeof(<型別或變數名>)
他只針對數據型別不針對變數
若運算物件爲變數,則所求結果是這個變數所佔用的記憶體空間的位元組數,若運算物件是數據型別,則所求結果是這種數據型別的變數佔用的記憶體空間的位元組數。
八、條件運算子
8.1表達式:<表達式1> ? <表達式2> : <表達式3>
先計算表達式1的邏輯,爲真就計算表達式2,否則計算表達式3,並以它的結果作爲整個表達式的值。
8.2優先順序高於賦值運算子
運算子優先順序總結
大多數運算子的結合性都是自左向右的,只有單目運算子、條件運算子和賦值運算子是自右向左。