C和C++運算符


以下是C++程式語言中的所有運算子的優先級和結合性列表。

優先級 運算子 敘述 示例 重載性 結合性
1 :: 作用域解析(C++專有) Class::age = 2; 由左至右
2 ++ 后綴遞增 i++  
-- 后綴遞減 i--  
{} 組合 {i++;a*=i;}  
() 函數調用或變量初始化 c_tor(int x, int y) : _x(x), _y(y * 10) {}  
[] 數組訪問 array[4] = 2;  
. 以對象方式訪問成員 obj.age = 34;
-> 以指針方式訪問成員 ptr->age = 34;  
dynamic_cast 運行時檢查類型轉換(C++專有) Y& y = dynamic_cast<Y&>(x);
static_cast 未經檢查的類型轉換(C++專有) Y& y = static_cast<Y&>(x);
reinterpret_cast 重定義類型轉換(C++專有) int const* p = reinterpret_cast<int const*>(0x1234);
const_cast 更改非常量屬性(C++專有) int* q = const_cast<int*>(p);
typeid 獲取類型信息(C++專有) std::type_info const& t = typeid(x);
3 ++ 前綴遞增 ++i   由右至左
-- 前綴遞減 --i  
+ 一元正號 int i = +1;  
- 一元負號 int i = -1;  
!
not
邏輯非
!的備用拼寫
if (!done) …  
~
compl
按位取反
~的備用拼寫
flag1 = ~flag2;  
(type) 強制類型轉換 int i = (int)floatNum;  
* 引用 int data = *intPtr;  
& 取某某的地址(參考) int *intPtr = &data;  
sizeof 某某的大小 size_t s = sizeof(int);
new 動態內存分配(C++專有) long* pVar = new long;  
new[] 動態數組內存分配(C++專有) long* array = new long[20];  
delete 動態內存釋放(C++專有) delete pVar;  
delete[] 動態數組內存釋放(C++專有) delete [] array;  
4 .* 成員對象選擇(C++專有) obj.*var = 24; 由左至右
->* 成員指針選擇(C++專有) ptr->*var = 24;  
5 * 乘法 int i = 2 * 4;  
/ 除法 float f = 10.0 / 3.0;  
% 模數(取余) int rem = 4 % 3;  
6 + 加法 int i = 2 + 3;  
- 減法 int i = 5 - 1;  
7 << 位元左移 int flags = 33 << 1;  
>> 位元右移 int flags = 33 >> 1;  
8 < 小於關系 if (i < 42) …  
<= 小於等於關系 if (i <= 42) ...  
> 大於關系 if (i > 42) …  
>= 大於等於關系 if (i >= 42) ...  
9 ==
eq
等於關系
==的備用拼寫
if (i == 42) ...  
!=
not_eq
不等於關系
!=的備用拼寫
if (i != 42) …  
10 &
bitand
位元 AND
&的備用拼寫
flag1 = flag2 & 42;  
11 ^
xor
位元 XOR(獨占or)
^的備用拼寫
flag1 = flag2 ^ 42;  
12 |
bitor
位元 OR(包含or)
|的備用拼寫
flag1 = flag2 | 42;  
13 &&
and
邏輯 AND
&&的備用拼寫
if (conditionA && conditionB) …  
14 ||
or
邏輯 OR
||的備用拼寫
if (conditionA || conditionB) ...  
15 c?t:f 三元條件運算 int i = a > b ? a : b; 由右至左
16 = 直接賦值 int a = b;  
+= 以和賦值 a += 3;  
-= 以差賦值 b -= 4;  
*= 以乘賦值 a *= 5;  
/= 以除賦值 a /= 2;  
%= 以取余數賦值 a %= 3;  
<<= 以位元左移賦值 flags <<= 2;  
>>= 以位元右移賦值 flags >>= 2;  
&=
and_eq
以位元AND賦值
&=的備用拼寫
flags &= new_flags;  
^=
xor_eq
以位元XOR賦值
^=的備用拼寫
flags ^= new_flags;  
|=
or_eq
以位元OR賦值
|=的備用拼寫
flags |= new_flags;  
17 throw 拋出異常 throw EClass(“Message”);
18 , 循環評估運算 for (i = 0, j = 0; i < 10; i++, j++) …   由左至右

1. 算術運算符及算術表達式:

c++中的算術運算符有:+(取正或加),-(取負或減),*(乘),/(除),%(取余),++(增1),

--(減1)。其中+(取正),-(取負),++(增1),--(減1)是單目運算符,其余是雙目運算符。

+,-,*,/ 運算符與其在數學中的意義,優先級,結合性基本相同。但必須注意“/”運算符,當它的兩個操作數都是整數時,其計算結果也是整型,結果為兩整數相除后的商。例,3/2的結果是1,3/5的結果是0.

運算符“%”是取余運算,結果為兩個整數相除后的余數。例如,5%3的結果是2,6%2結果是0.

注意:要求取余運算符“%”的兩個操作數必須是整型或字符型數據。

增1,減1運算是將變量的值增1或減1.這兩個運算符都有前置和后置兩種形式。前置形式是先計算操作數的值(增1或減1),然后把操作數的值作為表達式的結果。而后置形式是先將操作數的值作為表達式的結果,然后將操作數的值(增1或減1)。

2. 關系運算符及關系表達式:

關系運算是比較兩個操作數的大小。當兩個操作數滿足關系運算符指定的關系時,表達式的值為true,否則為false。

在c++中,關系運算符都是雙目運算符,共有6個:<(小於)<=(小於等於)>(大於)>=(大於等於)==(等於)!=(不等於)。其中前4種和后2種屬於不同的優先級,前4種的優先級高於后2種。

由關系運算符和操作運算符組成的表達式為關系表達式,關系表達式的結果為布爾類型。

3. 邏輯運算符及邏輯表達式:

邏輯運算符共有3個:1個單目運算符“!”,2個雙目運算符“&&”(邏輯與)和“||”(邏輯或)。其中邏輯與的優先級比邏輯或高。

邏輯運算的結果是邏輯值。參與邏輯運算的操作數可以是任一基本類型的數據,在進行判斷時,系統將非零值作為真,零為假。

對於單目運算符“!”(邏輯求反),若其操作數為false(0),運算結果為true(1),否則為false(0)。例如,!5的結果為0.

對於“&&”(邏輯與)運算符,只要兩個操作數中有一個為false(0),運算結果就為false(0),否則true(1).例如,2&&5的結果為1.

對於“||”(邏輯或)運算符,只要兩個操作數中有一個為true(1),運算結果就為true(1),否則為false(0)。例如,5||0的結果為1.

由邏輯預算副和操作數構成的表達式為邏輯表達式,邏輯表達式的結果為布爾類型。

注意:當多個“||”(邏輯或)運算符,只要兩個操作數中有一個為true(1),運算結果就為true(1),否則則為false(0),停止后續計算,例如:a=0,b=2,c=3;表達式a++||b++||c++運算后,整個表達式值為true(1),a的值為1,b的值為2,c的值為3.

4. 賦值運算符和賦值表達式:

c++中的賦值運算符分兩種:簡單賦值運算和復合賦值運算符。賦值運算符都是二元運算符,右結合。由賦值運算符和操作數組成的表達式稱為賦值表達式。

(1)簡單賦值運算符

c++中的簡單賦值運算符為“=”。其表達式的一般形式為:

變量=表達式

該表達式執行時,先計算賦值運算符右部“表達式”的值,然后將它賦給左邊的變量。賦值表達式的值為左邊變量的值,其類型為左邊變量的類型。

(2) 復合賦值運算符:

復合賦值運算符由一個基本賦值運算符和其他一些運算符復合構成,共有10個,分別為:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=.

如果以“op”表示某種運算符,則復合賦值表達式的一般形式為:

變量op=表達式

等價於:

變量=變量op表達式

即先用左部變量和右部表達式作數值運算,然后將運算結果送給左部變量。例如:

a+=3 等價於 a=a+3

使用復合賦值運算符不僅書寫簡練,而且經過編譯以后生成的代碼少。

5. 位運算符:

c++提供了6個位運算符:~(按位求反),&(按位與),|(按位或),^(按位異或),<<(左移位),>>(右移位),其中按位求反是單目運算符,其余都是雙目運算符。

位運算符是對其操作數按二進制形式逐位進行運算,參與運算的操作數都應為整型數,不能是實型數。

(1)~(按位求反):其作用是對一個二進制數的每一位求反,即0→1,1→0.

(2)&(按位求反):其作用是對兩個操作數對應的每一位分別進行邏輯與操作。兩操作數對應位都是1,則該位運算結果為1,否則該位運算結果為0.

(3)|(按位或):其作用是對兩個操作數對應的每一位非別進行邏輯或操作。兩操作數對應位中有1位是1,則該位運算結果為1,否則該位運算結果為0.

(4)^(按位異或):其作用是對兩個操作數對應的每一位分別進行邏輯異或操作。兩操作數對應位的值不同,則該位運算結果為1,否則該位運算結果為0.

(5)>>(右移位):將左操作數的各二進制位右移,右移位數由右操作數給出。右移1位相當於將操作數除以2。例如,表達式8<<1的結果為4.

(6)<<(左移位):將左操作數的各二進制位左移,左移位數由右操作數給出。左移1位相當於將操作數乘以2.例如,表達式2<<1的結果為4.

注意:移位運算的結果就是位運算表達式的值,參與運算的兩個操作數的值並沒有發生變化。

6. 條件運算符:

條件運算符“?:”是c++中位移的一個三目運算符,其使用的一般形式為:

表達式?表達式2:表達式3

該表達式執行時,先計算表達式1,若其值為真,則表達式2的值為條件表達式的值;否則表達式3的值為條件表達式的值。條件運算符的優先級低於算術運算符,關系運算符和邏輯運算符,高於賦值運算符,結合性“從右到左”。

7.逗號運算符:

由逗號運算符構成的表達式稱為逗號表達式,其一般形式為:

表達式1,表達式2。。。,表達式n

逗號表達式的執行規則是從左到右逐個表達式執行,最后一個表達式的值是該逗號表達式的值。

注意:逗號運算符的優先級最低。

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM