運算子
功能描述
+
一元正號
+ expr
-
一元負號
- expr
*
乘法
expr * expr
/
除法
expr / expr
%
求餘
expr % expr
+
加法
expr + expr
-
減法
expr - expr
上述運算子的優先順序中,由上往下,一元運算子優先順序最高,其次是乘除運算,最後是加減運算,所有的運算子都滿足左結合律。
對於求餘運算,如果m和n都是整數,且m非0;則表示式(m/n)*n+m%n
的求值結果與m相等,即若m%n不為0,則結果的符號和m相同。除了-m導致溢位的特殊情況,其他時候(-m)/n
和m/(-n)
都等於-(m/n)
,m%(-n)
等於m%n
,(-m)%n
等於-(m%n)
。
運算子結合律
功能描述
!
右
邏輯非!expr
<
左
小於expr < expr
<=
左
小於等於
expr <= expr
>
左
大於expr > expr
>=
左
大於等於
expr >= expr
==
左
相等expr == expr
!=
左
不相等expr != expr
&&
左
邏輯與expr && expr
||
左
邏輯或expr || expr
對於邏輯與和或運算有以下規則(短路求值):
遞增運算子(++)和遞減運算子(–)提供了簡單的加1和減1操作。有兩種形式:前置版本和後者版本。區別在於,前置版本是先將運算子物件加1(或減1),然後改變後的物件作為求值結果。後置版本也會將運算物件加1,但求值結果是運算物件改變之前那個值的副本:
int i =
0, k =
0, j;
j =++i;
//j = 1, i = 1:前置版本得到遞增之後的值
j = k++
;//j = 0, k = 1:後置版本得到遞增之前的值
簡單來說就是,符號和變數誰在前,先執行誰。遞增在前,就先遞增再求值;遞增在後,就先求值再遞增。
點運算子和箭頭運算子都可用於訪問成員。點運算子獲取類物件的乙個成員;箭頭運算子與點運算有關,表示式ptr->mem
等價於(*ptr).mem
:
string s1 =
"a string"
,*p =
&s1;
auto n = s1.
size()
;n =
(*p)
.size()
;n = p-
>
size()
;
tip:解引用運算子的優先順序低於點運算子,因此執行解引用運算的子表示式兩端必須加上括號
條件運算子(?:)使用方法:
cond ? expr1 : expr2;
cond是判斷條件的表示式,若cond為真,則計算expr1,並返回其值,否則計算expr2,返回expr2。
位運算常常用於整數型別的運算物件,其運算物件可看作是二進位制位的集合
運算子功能
描述~
位求反
~ expr
<<
左移
expr1 << expr2
>>
右移
expr1 >> expr2
&
位與
expr1 & expr2
^
位異或
expr1 ^ expr2
|
位或
expr1 | expr2
將變數var的第n位置1:
var |= 1 << n;
將變數var的第n位置0:
var &= ~(1 << n;)
sizeof運算子返回一條表示式或乙個型別名字所佔的位元組數。其運算結果部分依賴於其作用的型別:
C Primer 5th學習筆記4 異常語句
c 語言中,異常處理包括以下幾種 try語句的通用語法形式是 try catch exception declaration catch exception declaration c 標準庫中定義了一組類,用於報告標準庫函式遇到的問題。這些類分別定義在以下四個標頭檔案中 exception 最常見...
文字查詢程式(C primer5th)
書上的乙個比較簡單的例題,可以輸出文字中單詞總共出現的次數,所在的行數及所在行的內容。主要的思路是建立乙個vector來分行儲存文字,然後將單詞及單詞出現行數 set 建立乙個map。通過查詢單詞獲得其對映的set。set的size為出現的次數,set的元素為出現的行數,通過set元素作為vecto...
C primer 5th 第二章閱讀筆記
知識點一 using type 型別 可以取代typedef用於別名宣告。例如 using do double 等價於 typdef double do 二者的意思都是do是double的同義詞或者別名 但在型別別名中千萬注意指標,不然會引起誤解!例如 typedef char ptr ptr是ch...