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⊙^*


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM