C 操作符的優先順序

2021-07-05 22:56:58 字數 3418 閱讀 7730

優先順序

操作符描述

例子結合性1()

->.::

++--

調節優先順序的括號操作符

陣列下標訪問操作符

通過指向物件的指標訪問成員的操作符

通過物件本身訪問成員的操作符

作用域操作符

後置自增操作符

後置自減操作符

(a + b) / 4;

array[4] = 2;

ptr->age = 34;

obj.age = 34;

class::age = 2;

for( i = 0; i < 10; i++ ) ...

for( i = 10; i > 0; i-- ) ...

從左到右2!

~++---

+*&(type)

sizeof

邏輯取反操作符

按位取反(按位取補) 

前置自增操作符

前置自減操作符

一元取負操作符

一元取正操作符

解引用操作符

取位址操作符

型別轉換操作符

返回物件占用的位元組數操作符

if( !done ) ...

flags = ~flags;

for( i = 0; i < 10; ++i ) ...

for( i = 10; i > 0; --i ) ...

int i = -1;

int i = +1;

data = *ptr;

address = &obj;

int i = (int) floatnum;

int size = sizeof(floatnum);

從右到左

3->*

.*在指標上通過指向成員的指標訪問成員的操作符

在物件上通過指向成員的指標訪問成員的操作符

ptr->*var = 24;

obj.*var = 24;

從左到右4*

/%乘法操作符

除法操作符

取餘數操作符

int i = 2 * 4;

float f = 10 / 3;

int rem = 4 % 3;

從左到右5+

-加法操作符

減法操作符

int i = 2 + 3;

int i = 5 - 1;

從左到右

6<<

>>

按位左移操作符

按位右移操作符

int flags = 33 << 1;

int flags = 33 >> 1;

從左到右

7<

<=

>

>=

小於比較操作符

小於或等於比較操作符

大於比較操作符

大於或等於比較操作符

if( i < 42 ) ...

if( i <= 42 ) ...

if( i > 42 ) ...

if( i >= 42 ) ...

從左到右8==

!=等於比較操作符

不等於比較操作符

if( i == 42 ) ...

if( i != 42 ) ...

從左到右9&

按位與操作符

flags = flags & 42;

從左到右10^

按位異或操作符

flags = flags ^ 42;

從左到右11|

按位或操作符

flags = flags | 42;

從左到右

12&&

邏輯與操作符

if( conditiona && conditionb ) ...

從左到右

13||

邏輯或操作符

if( conditiona || conditionb ) ...

從左到右

14? :

三元條件操作符

int i = (a > b) ? a : b;

從右到左15=

+=-=

*=/=

%=&=

^=|=

<<=

>>=

賦值操作符

復合賦值操作符(加法)

復合賦值操作符(減法)

復合賦值操作符(乘法)

復合賦值操作符(除法)

復合賦值操作符(取餘)

復合賦值操作符(按位與)

復合賦值操作符(按位異或)

復合賦值操作符(按位或)

復合賦值操作符(按位左移)

復合賦值操作符(按位右移)

int a = b;

a += 3;

b -= 4;

a *= 5;

a /= 2;

a %= 3;

flags &= new_flags;

flags ^= new_flags;

flags |= new_flags;

flags <<= 2;

flags >>= 2;

從右到左16,

逗號操作符

for( i = 0, j = 0; i < 10; i++, j++ ) ...

從左到右

記憶方法:

--摘自《c語言程式設計實用問答》       

問題:如何記住運算子的15種優先順序和結合性?    

解答:c語言中運算子種模擬較繁多,優先順序有15種,結合性有兩種。    

如何記憶兩種結合性和15種優先順序?下面講述一種記憶方法。    

結合性有兩種,一種是自左至右,另一種是自右至左,大部分運算子的結合性是自左至右,只有單目運算子、三目運算子的賦值運算子的結合性自右至左。    

優先順序有15種。記憶方法如下:    

記住乙個最高的:構造型別的元素或成員以及小括號。    

記住乙個最低的:逗號運算子。    

剩餘的是

一、二、三、賦值。    

意思是單目、雙目、三目和賦值運算子。    

在諸多運算子中,又分為:    

算術、關係、邏輯。    

兩種位操作運算子中,移位運算子在算術運算子後邊,邏輯位運算子在邏輯運算子的前面。再細分如下:    

算術運算子分     *,/,%高於+,-。    

關係運算子中,〉,〉=,<,<=高於==,!=。    

邏輯運算子中,除了邏輯求反(!)是單目外,邏輯與(&&)高於邏輯或(||)。    

邏輯位運算子中,除了邏輯按位求反(~)外,按位與(&)高於按位半加(^),高於按位或(|)。    

這樣就將15種優先順序都記住了,再將記憶方法總結如下:    

去掉乙個最高的,去掉乙個最低的,剩下的是

一、二、三、賦值。雙目運算子中,順序為算術、關係和邏輯,移位和邏輯位插入其中。

c 操作符優先順序

c 操作符的優先順序 操作符及其結合性 功能 用法l ll 全域性作用域 類作用域 名字空間作用域 name class name namespace namell lll.成員選擇 成員選擇 下標 函式呼叫 型別構造 object.member pointer member variable ex...

C 操作符優先順序

c 操作符的優先順序 操作符及其結合性 功能 用法l l l 全域性作用域 類作用域 名字空間作用域 name class name namespace name l l l l l 成員選擇 成員選擇 下標 函式呼叫 型別構造 object.member pointer member variab...

操作符優先順序

操作符優先順序 優先順序運算子 名稱或含義 使用形式 結合方向說明1 陣列下標 陣列名 常量表示式 左到右 圓括號 表示式 函式名 形參表 成員選擇 物件 物件.成員名 成員選擇 指標 物件指標 成員名2 負號運算子 表示式 右到左單目 型別 強制型別轉換 資料型別 表示式 自增運算子 變數名 變數...