一、表示式的概念
表示式是由乙個或多個運算物件組成,運算物件之間可以通過運算子連線起來。
二、復合表示式
復合表示式是指含有兩個或者多個運算子的表示式。
【注意】復合表示式進行運算的時候要注意運算子的優先順序。
三、算數運算子的優先順序表
算數運算子(左結合律)
運算子功能用法+
-一元正號
一元負號
+ expr
- expr*/
%乘法除法求餘
expr * expr
expr / expr
expr % expr+-
加法減法
expr + expr
expr - expr
表中的算數運算子的優先順序從上往下依次減小!以上的運算子都滿足
左結合律,所以
當優先順序相同的時候,從左往右依次進行計算。
四、邏輯運算子和關係運算子
邏輯運算子和
關係運算子
結合律運算子
功能用法右!
邏輯非! expr左左
左左<
<=
>
>=
小於小於等於
大於大於等於
expr < expr
expr <= expr
expr > expr
expr >= expr左左
==!=
相等不相等
expr == expr
expr != expr左&&
邏輯與expr && expr左||
邏輯或expr || expr
【注意】以上的9種運算子除了邏輯與(&&)和邏輯或(||)之外都沒有規定運算順序。
邏輯與、邏輯或的運算順序
邏輯與:當且僅當左側運算物件為真時才對右側運算物件求值。
邏輯或:當且僅當左側運算物件為假時才對右側運算物件求值。
五、賦值運算子
賦值運算子滿足右結合律
賦值運算子的優先順序比較低,低於關係運算子。
【注意】切勿混用賦值運算子(=)和相等運算子(==)!如果混用發生的錯誤是不容檢查出來的。
if(i == j)
判斷i和j是否相等,如果相等就進行相應的操作。否則不會進入if條件語句。
if(i = j)
這個是把j的值賦值給i,只要j的值不等於0,就可以進入if條件語句進行相應的操作。
六、遞增和遞減運算子
遞增運算子(++)遞減運算子(--),這兩個運算子分別為物件進行加一,減一操作。
它們有兩個版本,乙個是前置版本(++i),還有乙個後置版本(i--)
先來看一下這兩個版本有什麼區別
前置版本:
int i = 0, j;
j = ++ i; // j = 1 , i = 1;
後置版本:
int i = 0, j;
j = i++; // j = 0, i = 1;
通過以上的例子我們可以知道,
前置版本返回的是
遞增(或遞減)之後的值,但是
後置版本返回的是
遞增(或遞減)之前的值。
【注意】在相同的條件下,前置版本的效率通常高於後置版本的。因為後置版本需要將原始的值儲存下來,需要乙個臨時變數,但是前置版本值接就是返回遞增(或遞減)之後的值,不需要建立乙個臨時變數,所以效率會高一點。
混用解引用運算子和遞增運算子
來看乙個例子
*p++;
【注意】後置版本的優先順序高於解引用運算子,所以以上的表示式可以寫成這樣*(p++); 這個表示式首先將p的值加一, 然後返回p的初始值的副本作為其結果,然後*解引用的就是p未加之前的值。
七、sizeof運算子
sizeof運算子返回的是一條表示式或者乙個型別名字所佔的位元組數。sizeof運算子滿足右結合律。
八、逗號運算子
逗號運算子含有兩個運算物件,按照從左向右的順序依次求值。
【注意】逗號運算子規定了運算物件的求值順序。
首先對左側的表示式求值,然後將求值結果丟棄,逗號運算子的真正結果是右側表示式的值。
複習C (十)表示式
c 中的每個表示式都有值,即使是賦值表示式 x 10 c 將賦值表示式的值定義為左側成員的值,所以可以有 a x 10 3 a的值為13。賦值運算子是從右向左結合的 通常cout會在顯示bool值之前把他們轉換為int。判定表示式時會先執行這個表示式 if i 這時在判斷i 時,i的值也改變了。這被...
C lambda表示式複習
include include include include using namespace std int main lambda表示式也就是乙個函式,我們可以把它賦給函式指標,也可以在後面加上括號使用。裡面可以新增一些限制lambda塊語句中使用外部變數的限制符。一共有四種情況 1.空白表示不...
正規表示式複習
字元描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了regexp 物件的multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置...