c 中 和 的優先順序 cout運算從右到左

2021-08-06 01:37:37 字數 4000 閱讀 6010

運算子優先順序

優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。

相同優先順序中,按結合順序計算。大多數運算是從左至右計算,只有三個優先順序是從右至左結合的,它們是單目運算子、條件運算子、賦值運算子。

基本的優先順序需要記住:

指標最優,單目運算優於雙目運算。如正負號。

先乘除(模),後加減。

先算術運算,後移位運算,最後位運算。

請特別注意:1 << 3 + 2 & 7等價於 (1 << (3 + 2))&7.

邏輯運算最後計算。

優先順序

運算子

名稱或含義

使用形式

結合方向

說明

1

後置++

後置自增運算子

變數名++

左到右

後置–後置自減運算子

變數名–

[ ]

陣列下標

陣列名[整型表示式]

( )

圓括號

(表示式)/函式名(形參表)

.

成員選擇(物件)

物件.成員名

->

成員選擇(指標)

物件指標->成員名

2

-

負號運算子

-表示式

右到左

單目運算子

(型別)

強制型別轉換

(資料型別)表示式

前置++

前置自增運算子

++變數名

單目運算子

前置–

前置自減運算子

–變數名

單目運算子

*

取值運算子

*指標表示式

單目運算子

&

取位址運算子

&左值表示式

單目運算子

!

邏輯非運算子

!表示式

單目運算子

~

按位取反運算子

~表示式

單目運算子

sizeof

長度運算子

sizeof 表示式/sizeof(型別)

3

/

表示式/表示式

左到右

雙目運算子

*

表示式*表示式

雙目運算子

%

餘數(取模)

整型表示式%整型表示式

雙目運算子

4

+

表示式+表示式

左到右

雙目運算子

-

表示式-表示式

雙目運算子

5

<<

左移

表示式《表示式

左到右

雙目運算子

>>

右移

表示式》表示式

雙目運算子

6

>

大於

表示式》表示式

左到右

雙目運算子

>=

大於等於

表示式》=表示式

雙目運算子

<

小於

表示式《表示式

雙目運算子

<=

小於等於

表示式<=表示式

雙目運算子

7

==

等於

表示式==表示式

左到右

雙目運算子

!=

不等於

表示式!= 表示式

雙目運算子

8

&

按位與

整型表示式&整型表示式

左到右

雙目運算子

9

^

按位異或

整型表示式^整型表示式

左到右

雙目運算子

10

|

按位或

整型表示式|整型表示式

左到右

雙目運算子

11

&&

邏輯與

表示式&&表示式

左到右

雙目運算子

12

||

邏輯或

表示式||表示式

左到右

雙目運算子

13

?:

條件運算子

表示式1? 表示式2: 表示式3

右到左

三目運算子

14

=

賦值運算子

變數=表示式

右到左

/=

除后賦值

變數/=表示式

*=

乘後賦值

變數*=表示式

%=

取模後賦值

變數%=表示式

+=

加後賦值

變數+=表示式

-=

減後賦值

變數-=表示式

<<=

左移後賦值

變數<<=表示式

>>=

右移後賦值

變數》=表示式

&=

按位與後賦值

變數&=表示式

^=

按位異或後賦值

變數^=表示式

|=

按位或後賦值

變數|=表示式

15

,

逗號運算子

表示式,表示式,…

左到右

從左向右順序運算

例子:

#include 

using

namespace

std;

int main()

結果:

說明:

cout的運算是從右向左進行的,但最後輸出還是從左到右。所以,

cout << p++ << (p++) << (p)++ << ++p << *(++p) <

依次++(p),++*p,(++p),++p,(*p)++,(p++), *p++ ,最後再反著輸出。

1.++*p:p指向s[0],並把s[0]加1做為表示式的值,所以輸出為1,此時s[0]==』1』

2.++(*p):p還指向s[0](s[0]現在的值為1),並把s[0]加1做為表示式的值,所以輸出為2,此時s[0]==』2』

3.*(++p):p指向s[1],然後取s[1]的值作為表示式的值,輸出』1』

4.*++p :p指向s[2],然後取s[2]的值作為表示式的值,輸出』2』

5.(*p)++:p還是指向s[2],取s[2]的值作為表示式的值,所以輸出』2』,然後s[2]的值加1,s[2]==3

6.*(p++):p還是指向s[2](現值為3),取s[2]的值作為表示式的值,所以輸出』3』,然後p指向s[3]

7.*p++ :p指向s[3],取s[3]的值作為表示式的值,所以輸出』3』,然後p指向s[4];

最後反著輸出為3322121

此陣列s的值為」213345678」.所以後面的輸出就是這些值了。

C 運算優先順序

precedence operator description example associativity1 grouping operator array access member access from a pointer member access from an object scopin...

運算子優先順序 C 運算子優先順序

c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...

C語言運算優先順序

圓方括號 箭頭一句號,自增自減非反負 針強位址長度,乘除,加減,再移位,小等大等 等等不等,八位與,七位異,六位或,五與,四或,三疑,二賦,一真逗。其中 號為乙個等級分段。1級 左結合 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子。2級 右結合 邏輯非運算子 按位取反運算子 字首增量運...