c語言運算優先順序與結合方向的問題
c語言運算的結合方向一直困擾我,不過我終於get到了哈哈
先附上c語言運算優先順序和結合方向圖片
以上有c語言一共的15個優先順序,從上往下遞增
c語言的運算子號有很多,當我們打程式碼或者看程式碼的時候符號多了真的會搞錯,但是當我們仔細研究c運算子時,就會發現還是有規律可尋的呢
綜合上表我做一個概述
第一步:建議首先確定好成員(比如結構體陣列中stu[i].sum即“結構體陣列名[i].成員型別(type)”),再看有無括號,有括號先把括號裡面的確定算好
第二步:然後我們要注意單目運算子,單目運算子就是這種運算子只針對一個變數,i++, - (負號), * (指標), & (取址)等,先把單個變數自己的運算算好
再去想和其他變數的運算啦,所有單目運算子的變數計算我們都要從右到左。例如*p++==*(p++)
第三步:看雙目運算子, 再就是兩個變數的運算了,雙目運算子從左到右,但是不同的雙目運算子優先順序不同,所以在看雙目運算子中要注意計算的
先後,這個需要我們記的,記住優先順序,還有是從左看到右的。
在這裡想個人解讀一下&,| 雙目運算子
按位與 & ,按位 | 我們並不常用,但是不能和邏輯與 &&,邏輯或 || 弄混啦
& 和 | 在保留和清零某些變數的時候會用到,
按位 & 其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
例如:9&5可寫算式如下: 00001001 (9的二進位制補碼) & 00000101 (5的二進位制補碼)== 00000001 (1的二進位制補碼),可見9&5=1。
按位與運算通常用來對某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 運算 ( 255 的二進位制數為0000000011111111)。
按位 | 其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。
例如:9|5可寫算式如下: 00001001|00000101
00001101 (十進位制為13)可見9|5=13
按位異或 ^ 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現。
例如9^5可寫成算式如下: 00001001^00000101 == 00001100 (十進位制為12)
第四步:在運算完成了之後就 進入賦值環節啦,賦值運算子是從右到左賦值的。例如:a=b+d+c是先算右邊的(b+d+c) 再賦值給a
基本四步可以完成了,但是如果用逗號運算子的話,需要說明一下 最後一級逗號運算子
舉例說明
b=2,c=7,d=5 ;
a1=(++b,c--,d+3);
在先計算括號裡面的,根據逗號逐個賦值,所以a1最後會等於8。
a2=++b,c--,d+3;
根據優先順序可知,先賦值再看逗號,a2=3。
歡迎大家指正哦*^⊙o⊙^*