運算子的優先順序

2021-05-23 02:00:00 字數 1123 閱讀 5545

下面按優先順序從高到低的順序總結一下各種運算子,每一條所列的各運算子具有相同的優先順序,對於同一優先順序的多個運算子按什麼順序計算也有說明,雙目運算子就簡單地用「左結合」或「右結合」來說明了。和指標有關的運算子* & ->也在這裡列出來了,以後再詳細解釋。

1、識別符號、常量、字串和用()括號套起來的表示式是組成表示式的最基本單元,在運算中做運算元,優先順序最高。

2、字尾運算子,包括陣列取下標、函式呼叫()、結構體取成員.、指向結構體的指標取成員->、字尾自增++、字尾自減--。如果乙個運算元後面有多個字尾,按照離運算元從近到遠的順序(也就是從左到右)依次運算,比如a.name++,先算a.name,再++,這裡的.name應該看成a的乙個字尾,而不是把.看成雙目運算子。

3、單目運算子,包括字首自增++、字首自減--、sizeof、型別轉換()、取位址運算&、指標間接定址*、正號+、負號-、按位取反~、邏輯非! 。如果乙個運算元前面有多個字首,按照離運算元從近到遠的順序(也就是從右到左)依次運算,比如!~a,先算~a,再求!。

4、乘*、除/、模%運算子。這三個運算子是左結合的。

5、加+、減-運算子。左結合。

6、移位運算子《和》。左結合。

7、關係運算子< > <= >=。左結合。

8、相等性運算子==和!=。左結合。

9、按位與&。左結合。

10、按位異或^。左結合。

11、按位或|。左結合。

12、邏輯與&&。左結合。

13、邏輯或||。左結合。

14、條件運算子:?。在第 2 節 「if/else語句」講過dangling-else問題,條件運算子也有類似的問題。例如a ? b : c ? d : e是看成(a ? b : c) ? d : e還是a ? b : (c ? d : e)?c語言規定是後者。

15、賦值=和各種復合賦值(*= /= %= += -= <<= >>= &= ^= |=)。右結合。

16、逗號運算子。左結合。

了解了運算子的優先順序就可以很容易回答下面乙個問題

以下**查詢和列印0~1024之間所有256的倍數,對嗎?

int i = 0;

for (; i <= 1024; ++i)

if (i & 0xff == 0)

printf("%d/n",i);

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

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

運算子優先順序 Python 運算子優先順序

python 運算子優先順序 運算子描述 lambda lambda表示式 or布林 或 and布林 與 not x 布林 非 in,not in 成員測試 is,is not 同一性測試 比較 按位或 按位異或 按位與 移位 加法與減法 乘法 除法與取餘 x,x 正負號 x 按位翻轉 指數 x.a...

運算子優先順序 PHP運算子優先順序

php運算子優先順序 結合方向 運算子附加資訊 非結合clone new clone 和 new左 array 非結合 遞增 遞減運算子 非結合 int float string array object bool 型別非結合 instanceof 型別右結合 邏輯操作符 左 算術運算子 左 算術運...