本來覺得自己不會被運算子優先順序問題困擾(實際自己寫程式時也確實如此),但無奈有些地就考你這個,看了幾篇大牛的部落格,精簡的總結如下三條指導原則:
1.優先順序表(起碼有個大概)
2.大多數運算子結合方向是「自左至右」, 即: 先左後右, 例如a- b+c
, b 兩側有- 和+兩種運算子的優先順序相同, 按先左後右結合方向, b 先與減號結合, 執行a- b 的運算, 再執行加c 的運算。
除了自左至右的結合性外,
c 語言有三類運算子參與運算的結合方向是從右至左
。即: 單目運算子, 條件運算子, 以及賦值運算子
。
3.自己寫時,加括號(這個最實用了吧)
運算子優先順序表:
優先順序
運算子
名稱或含義
使用形式
結合方向
說明
1
陣列下標
陣列名[常量表示式]
左到右--
()
圓括號(表示式)/函式名(形參表)
--.
成員選擇(物件)
物件.成員名
---<
成員選擇(指標)
物件指標-《成員名
--2
-
負號運算子
-表示式
右到左
單目運算子
~
按位取反運算子
~表示式
++
自增運算子
++變數名/變數名++
--
自減運算子
--變數名/變數名--
*
取值運算子
*指標變數
&
取位址運算子
&變數名
!
邏輯非運算子
!表示式
(
型別)
強制型別轉換
(資料型別)表示式
--sizeof
長度運算子
sizeof(表示式)
--3
/除
表示式/表示式
左到右雙目運算子
*乘
表示式*表示式
%
餘數(取模)
整型表示式%整型表示式
4
+加
表示式+表示式
左到右雙目運算子
-減
表示式-表示式
5
< span>左移
變數< p>
左到右雙目運算子
<<右移
變數《表示式
6
<大於
表示式《表示式
左到右雙目運算子
<=
大於等於
表示式<=表示式
< span>小於
表示式< p>
< span>
小於等於
表示式< p>
7
==等於
表示式==表示式
左到右雙目運算子
!
=
不等於表示式!= 表示式
8
&
按位與表示式&表示式
左到右雙目運算子
9
^
按位異或
表示式^表示式
左到右雙目運算子
10
|
按位或表示式|表示式
左到右雙目運算子
11
&&
邏輯與表示式&&表示式
左到右雙目運算子
12
||
邏輯或表示式||表示式
左到右雙目運算子
13
?:
條件運算子
表示式1?
表示式2: 表示式3
右到左
三目運算子
14
=
賦值運算子
變數=表示式
右到左--
/=
除后賦值
變數/=表示式
--*=
乘後賦值
變數*=表示式
--%=
取模後賦值
變數%=表示式
--+=
加後賦值
變數+=表示式
---=
減後賦值
變數-=表示式
--< span>
左移後賦值
變數< p>
--<<=
右移後賦值
變數<<=表示式
--&=
按位與後賦值
變數&=表示式
--^=
按位異或後賦值
變數^=表示式
--|=
按位或後賦值
變數|=表示式
--15
,
逗號運算子
表示式,表示式,…
左到右--
說明:
運算子共分為15級,1級優先順序最高,15級優先順序最低。
同一優先順序的運算子,運算次序由結合方向所決定。(結合性:2 13 14 是從右至左 其他都是從左至右)
簡單記就是:! < 算術運算子 < 關係運算子< && < || < 賦值運算子
C C 運算子 運算
規則 1 1 1 1 0 1 0 1 1 0 0 0 按位或運算 按位或運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位 也就是最後一位 相或。只要對應的二個二進位有乙個為1時,結果位就為1。參與 運算的兩個數均以補碼出現。例如 9 5可寫算式如下 00001001 00000101 00...
C C ,運算子過載
編輯運算子過載原始檔overload.cpp include using namespace std class complex complex double r,double i complex operator complex c2 void display private double rea...
C C 運算子高階
1 轉換運算子 一種特殊的類成員函式。定義該運算子後,編譯器將在可以使用內建轉換的地方自動呼叫它 class smallint 轉換函式必須是成員函式,通常定義為const operator int const private std size t m val int main si轉換成int,再...