操作符就是告訴編譯器來執(zhí)行數(shù)學或邏輯運算操作的符號。C++ 有非常豐富的內(nèi)置操作符。提供如下幾類的操作符:
下面的章節(jié)將一一介紹數(shù)學、關系、邏輯、位運算、賦值和其他操作符。
下面的就是 C++ 語言所支持的數(shù)學運算操作符:
假設變量 A 存儲 10,變量 B 存儲 20,那么:
運算符 | 描述 | 例子 |
---|---|---|
+ | 兩個運算數(shù)相加 | A + B = 30 |
- | 第一個運算數(shù)減去第二個運算數(shù) | A - B = -10 |
* | 運算數(shù)相乘 | A * B = 200 |
/ | 分子除以分母 | B / A = 2 |
% | 模數(shù)運算符,整除后的余數(shù) | B % A = 0 |
++ | 增量運算符,整數(shù)值逐次加1 | A++ = 11 |
-- | 減量運算符,整數(shù)值逐次減1 | A-- = 9 |
下面的就是 C++語言所支持的關系運算操作符:
假設變量 A 存儲 10,變量 B 存儲 20,那么:
運算符 | 描述 | 例子 |
---|---|---|
== | 檢查兩個運算數(shù)的值是否相等,如果是,則結果為 true | A == B 為 false |
!= | 檢查兩個運算數(shù)的值是否相等,如果不相等,則結果為 true | A != B 為 true |
> | 檢查左邊運算數(shù)是否大于右邊運算數(shù),如果是,則結果為 true | A > B 為 false |
< | 檢查左邊運算數(shù)是否小于右邊運算數(shù),如果是,則結果為 true | A < B 為 true |
>= | 檢查左邊運算數(shù)是否大于或者等于右邊運算數(shù),如果是,則結果為 true | A >= B 為 false |
<= | 檢查左邊運算數(shù)是否小于或者等于運算數(shù),如果是,則結果為 true | A <= B 為 true |
下面的就是 C++語言所支持的邏輯運算操作符:
假設變量 A 存儲 1,變量 B 存儲 0,那么:
運算符 | 描述 | 例子 |
---|---|---|
&& | 稱為邏輯與運算符。如果兩個運算數(shù)都非零,則結果為 true。 | A && B 為 true |
|| | 稱為邏輯或運算符。如果兩個運算數(shù)中任何一個非零,則結果為 true。 | A || B 為 true |
! | 稱為邏輯非運算符。用于改變運算數(shù)的邏輯狀態(tài)。如果邏輯狀態(tài)為 true,則通過邏輯非運算符可以使邏輯狀態(tài)變?yōu)?false | !(A && B) 為 false |
位操作運算是按位來進行操作的。與、或、非和異或的真值表如下:
p | q | p&q | p|q | p^q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假設變量 A 存儲 60,變量 B 存儲 13,那么:
下面的就是 C++ 語言所支持的位運算操作符:
假設變量 A 存儲 60,變量 B 存儲 13,那么:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
`A^B` = 0011 0001
~A = 1100 0011
運算符 | 描述 | 例子 |
---|---|---|
& | 稱為按位與運算符。它對整型參數(shù)的每一個二進制位進行布爾與操作。 | A & B = 12 . |
| | 稱為按位或運算符。它對整型參數(shù)的每一個二進制位進行布爾或操作。 | A | B = 61. |
^ | 稱為按位異或運算符。它對整型參數(shù)的每一個二進制位進行布爾異或操作。異或運算是指第一個參數(shù)或者第二個參數(shù)為true,并且不包括兩個參數(shù)都為 true 的情況,則結果為true。 | (A ^ B) = 49. |
~ | 稱為按位非運算符。它是一個單運算符,對運算數(shù)的所有二進制位進行取反操作。 | ~B = -61 . |
<< | 稱為按位左移運算符。它把第一個運算數(shù)的所有二進制位向左移動第二個運算數(shù)指定的位數(shù),而新的二進制位補0。將一個數(shù)向左移動一個二進制位相當于將該數(shù)乘以2,向左移動兩個二進制位相當于將該數(shù)乘以4,以此類推。 | A << 1 =120. |
>> | 稱為按位右移運算符。它把第一個運算數(shù)的所有二進制位向右移動第二個運算數(shù)指定的位數(shù)。為了保持運算結果的符號不變,左邊二進制位補 0 或 1 取決于原參數(shù)的符號位。如果第一個運算數(shù)是正的,運算結果最高位補 0;如果第一個運算數(shù)是負的,運算結果最高位補 1。 | A >> 1 = 15. |
>>> | 稱為 0 補最高位無符號右移運算符。這個運算符與>>運算符相像,除了位移后左邊總是補0. | A >>> = 15. |
下面的就是C++語言所支持的賦值運算操作符:
運算符 | 描述 | 例子 |
---|---|---|
= | 簡單賦值運算符,將右邊運算數(shù)的值賦給左邊運算數(shù) | C = A + B 將 A+B 的值賦給 C |
+= | 加等賦值運算符,將右邊運算符與左邊運算符相加并將運算結果賦給左邊運算數(shù) | C += A 相當于 C = C + A |
-= | 減等賦值運算符,將左邊運算數(shù)減去右邊運算數(shù)并將運算結果賦給左邊運算數(shù) | C -= A 相當于C = C - A |
*= | 乘等賦值運算符,將右邊運算數(shù)乘以左邊運算數(shù)并將運算結果賦給左邊運算數(shù) | C *= A 相當于C = C * A |
/= | 除等賦值運算符, 將左邊運算數(shù)除以右邊運算數(shù)并將運算結果賦值給左邊運算數(shù) | C /= A 相當于 C = C / A |
%= | 模等賦值運算符,用兩個運算數(shù)做取模運算并將運算結果賦值給左邊運算數(shù) | C %= A 相當于 C = C % A |
<<= | 左移且賦值運算符 | C <<= 2 相當于 C = C << 2 |
>>= | 右移且賦值運算符 | C >>= 2 相當于 C = C >> 2 |
&= | 位與且賦值運算符 | C &= 2 相當于 C = C & 2 |
^= | 位異或且賦值運算符 | C ^= A 相當于 C = C ^ A |
|= | 位或且賦值運算符 | C |= A 相當于 C = C | A |
下面是 C++ 支持的其他運算符:
操作符 | 描述 |
---|---|
sizeof | sizeof 操作符返回變量占用內(nèi)存的大小。比如,sizeof(a),a 是一個整數(shù)時,返回 4 |
條件 ? X : Y | 條件操作符:如果條件判斷為true,則返回 X,否則返回 Y. |
, | 逗號操作符:可以使操作順序執(zhí)行。整體逗號表達式的值就是逗號最后表達式的返回結果。 |
.(點) 和 ->(箭頭) | 成員操作符:用于獲取類、結構體或聯(lián)合體成員的引用。 |
轉(zhuǎn)換 | 轉(zhuǎn)換操作符:可以將數(shù)值類型轉(zhuǎn)成其他類型,比如,int(2.2000)將返回 2. |
& | 取地操作符:可以返回一個變量的地址。比如, &a 將會返回變量實際的內(nèi)存地址。 |
* | 指針操作符:指向一個變量。比如 *var 意味著指向變量 var. |
運算符優(yōu)先級確定表達式中項的分組。這會影響如何表達一個表達式。某些操作符比其他有更高的優(yōu)先級,例如,乘法運算符的優(yōu)先級高于加法操作符。
比如 x=7+3*2,這里x的值是13而不是20,因為乘法優(yōu)先級比加法高。所以應該先執(zhí)行3乘2,然后再加7.
操作符的優(yōu)先級如下表,上方的優(yōu)先級比下方高。較高優(yōu)先級的操作符優(yōu)先進行計算。
分類 | 操作符 | 操作順序 |
---|---|---|
后綴運算 | () [] -> . ++ - - | 從左到右 |
一元運算 | + - ! ~ ++ - - (type)* & sizeof | 從右到左 |
乘法 | * / % | 從左到右 |
加法 | + - | 從左到右 |
移位 | << >> | 從左到右 |
相等 | == != | 從左到右 |
比較 | < <= > >= | 從左到右 |
位與 | & | 從左到右 |
異或 | ^ | 從左到右 |
位或 | | | 從左到右 |
邏輯與 | && | 從左到右 |
|| | 邏輯或 | 從左到右 |
條件 | ?: | 從左到右 |
賦值 | = += -= *= /= %=>>= <<= &= ^= |= | 從右到左 |
逗號 | , | 從左到右 |