運算符優先級

優先級git

優先級從上到下依次遞減,最上面具備最高的優先級,逗號操做符具備最低的優先級。
相同優先級中,按結合順序計算。大多數運算是從左至右計算,只有三個優先級是從右至左結合的,它們是 單目運算符條件運算符賦值運算符
基本的優先級須要記住:
指針最優,單目運算優於雙目運算。如正負號。
請特別注意:1 << 3 + 2 && 7等價於 (1 << (3 + 2))&&7.
算術運算 > 移位運算 > 關係運算  > 位運算 > 邏輯運算 > 賦值運算
(算術移  爲 關位邏 賦值)
a = 2+58>>2>13|15&&8 = 1
 

運算符優先級C語言優先級

優先級
運算符
名稱或含義
使用形式
結合方向
說明
1
[]
數組下標
數組名[整型表達式]
左到右
 
()
圓括號
(表達式)/函數名(形參表)
 
.
成員選擇(對象)
對象.成員名
 
->
成員選擇(指針)
對象指針->成員名
 
2
-
負號運算符
-算術類型表達式
右到左
單目運算符
(type)
強制類型轉換
(純量數據類型)純量表達式
 
++
自增運算符
++純量類型可修改左值表達式
單目運算符
--
自減運算符
--純量類型可修改左值表達式
單目運算符
*
取值運算符
*指針類型表達式
單目運算符
&
取地址運算符
&表達式
單目運算符
!
邏輯非運算符
!純量類型表達式
單目運算符
~
按位取反運算符
~整型表達式
單目運算符
sizeof
長度運算符
sizeof 表達式
sizeof(類型)
 
3
/
表達式/表達式
左到右
雙目運算符
*
表達式*表達式
雙目運算符
%
餘數(取模)
整型表達式%整型表達式
雙目運算符
4
+
表達式+表達式
左到右
雙目運算符
-
表達式-表達式
雙目運算符
5
<<
左移
整型表達式<<整型表達式
左到右
雙目運算符
>>
右移
整型表達式>>整型表達式
雙目運算符
6
>
大於
表達式>表達式
左到右
雙目運算符
>=
大於等於
表達式>=表達式
雙目運算符
<
小於
表達式<表達式
雙目運算符
<=
小於等於
表達式<=表達式
雙目運算符
7
==
等於
表達式==表達式
左到右
雙目運算符
!=
不等於
表達式!= 表達式
雙目運算符
8
&
按位與
整型表達式&整型表達式
左到右
雙目運算符
9
^
按位異或
整型表達式^整型表達式
左到右
雙目運算符
10
|
按位或
整型表達式|整型表達式
左到右
雙目運算符
11
&&
邏輯與
表達式&&表達式
左到右
雙目運算符
12
||
邏輯或
表達式||表達式
左到右
雙目運算符
13
?:
條件運算符
表達式1? 表達式2: 表達式3
右到左
三目運算符
14
=
賦值運算符
可修改左值表達式=表達式
右到左
 
/=
除後賦值
可修改左值表達式/=表達式
 
*=
乘後賦值
可修改左值表達式*=表達式
 
%=
取模後賦值
可修改左值表達式%=表達式
 
+=
加後賦值
可修改左值表達式+=表達式
 
-=
減後賦值
可修改左值表達式-=表達式
 
<<=
左移後賦值
可修改左值表達式<<=表達式
 
>>=
右移後賦值
可修改左值表達式>>=表達式
 
&=
按位與後賦值
可修改左值表達式&=表達式
 
^=
按位異或後賦值
可修改左值表達式^=表達式
 
|=
按位或後賦值
可修改左值表達式|=表達式
 
15
,
逗號運算符
表達式,表達式,…
左到右
從左向右順序結合
說明:
同一優先級的運算符,結合次序由結合方向所決定。
簡單記就是:! > 算術運算符 > 關係運算符 > && > || > 賦值運算符
 

運算符優先級C++

運算符
描述
例子
可重載性
第一級別
     
::
做用域解析符
Class::age = 2;
不可重載
第二級別
     
()
函數調用
isdigit('1')
可重載
()
成員初始化
c_tor(int x, int y) : _x(x), _y(y*10){};
可重載
[]
數組數據獲取
array[4] = 2;
可重載
->
指針型成員調用
ptr->age = 34;
可重載
.
對象型成員調用
obj.age = 34;
不可重載
++
後自增運算符
for( int i = 0; i < 10; i++ ) cout << i;
可重載
--
後自減運算符
for( int i = 10; i > 0; i-- ) cout << i;
可重載
const_cast
特殊屬性轉換
const_cast<type_to>(type_from);
不可重載
dynamic_cast
特殊屬性轉換
dynamic_cast<type_to>(type_from);
不可重載
static_cast
特殊屬性轉換
static_cast<type_to>(type_from);
不可重載
reinterpret_cast
特殊屬性轉換
reinterpret_cast<type_to>(type_from);
不可重載
typeid
對象類型符
cout &laquo; typeid(var).name();
cout &laquo; typeid(type).name();
不可重載
第三級別(具備右結合性)
     
!
邏輯取反
if( !done ) …
可重載
not
! 的另外一種表達
   
~
按位取反
flags = ~flags;
可重載
compl
~的另外一種表達
   
++
預自增運算符
for( i = 0; i < 10; ++i ) cout << i;
可重載
--
預自減運算符
for( i = 10; i > 0; --i ) cout << i;
可重載
-
負號
int i = -1;
可重載
+
正號
int i = +1;
可重載
*
指針取值
int data = *intPtr;
可重載
&
值取指針
int *intPtr = &data;
可重載
new
動態元素內存分配
long *pVar = new long;
MyClass *ptr = new MyClass(args);
可重載
new []
動態數組內存分配
long *array = new long[n];
可重載
delete
動態析構元素內存
delete pVar;
可重載
delete []
動態析構數組內存
delete [] array;
可重載
(type)
強制類型轉換
int i = (int) floatNum;
可重載
sizeof
返回類型內存
int size = sizeof floatNum;
int size = sizeof(float);
不可重載
第四級別
     
->*
類指針成員引用
ptr->*var = 24;
可重載
.*
類對象成員引用
obj.*var = 24;
不可重載
第五級別
     
*
乘法
int i = 2 * 4;
可重載
/
除法
float f = 10.0 / 3.0;
可重載
%
取餘數(模運算)
int rem = 4 % 3;
可重載
第六級別
     
+
加法
int i = 2 + 3;
可重載
-
減法
int i = 5 - 1;
可重載
第七級別
     
<<
位左移
int flags = 33 << 1;
可重載
>>
位右移
int flags = 33 >> 1;
可重載
第八級別
     
<
小於
if( i < 42 ) …
可重載
<=
小於等於
if( i <= 42 ) ...
可重載
>
大於
if( i > 42 ) …
可重載
>=
大於等於
if( i >= 42 ) ...
可重載
第九級別
     
==
恆等於
if( i == 42 ) ...
可重載
eq
== 的另外一種表達
   
!=
不等於
if( i != 42 ) …
可重載
not_eq
!=的另外一種表達
   
第十級別
     
&
位且運算
flags = flags & 42;
可重載
bitand
&的另外一種表達
   
第十一級別
     
^
位異或運算
flags = flags ^ 42;
可重載
xor
^的另外一種表達
   
第十二級別
     
|
位或運算
flags = flags | 42;
可重載
bitor
|的另外一種表達
   
第十三級別
     
&&
邏輯且運算
if( conditionA && conditionB ) …
可重載
and
&&的另外一種表達
   
第十四級別
     
||
邏輯或運算
if( conditionA || conditionB ) ...
可重載
or
||的另外一種表達
   
第十五級別(具備右結合性)
     
? :
條件運算符
int i = (a > b) ? a : b;
不可重載
第十六級別(具備右結合性)
     
=
賦值
int a = b;
可重載
+=
加賦值運算
a += 3;
可重載
-=
減賦值運算
b -= 4;
可重載
*=
乘賦值運算
a *= 5;
可重載
/=
除賦值運算
a /= 2;
可重載
%=
模賦值運算
a %= 3;
可重載
&=
位且賦值運算
flags &= new_flags;
可重載
and_eq
&= 的另外一種表達
   
^=
位異或賦值運算
flags ^= new_flags;
可重載
xor_eq
^=的另外一種表達
   
|=
位或賦值運算
flags |= new_flags;
可重載
or_eq
|=的另外一種表達
   
<<=
位左移賦值運算
flags <<= 2;
可重載
>>=
位右移賦值運算
flags >>= 2;
可重載
第十七級別
     
throw
異常拋出
throw EClass(「Message」);
不可重載
第十八級別
     
,
逗號分隔符
for( i = 0, j = 0; i < 10; i++, j++ ) …
可重載
相關文章
相關標籤/搜索