C Primer 5th學習筆記3 表示式

2021-09-12 19:51:18 字數 2717 閱讀 2406

運算子

功能描述

+一元正號

+ 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)/nm/(-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...