c语言 正号运算符 作用,C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,...
1級(左結合) () 圓括號;[]下標運算符;->指向結構體成員運算符;. 結構體成員運算符. 2級(右結合) !邏輯非運算符;~按位取反運算符;++前綴增量運算符;--前綴減量運算符;+正號運算符;-負號運算符;(類型)類型轉換運算符;*指針運算符;&地址運算符;sizeof長度運算符. 3級(左結合) *乘法運算符;/除法運算符;%取余運算符. 4級(左結合) +加法運算符;-減法運算符. 5級(左結合) 右移運算符. 6級(左結合) =關系運算符. 7級(左結合) ==等于運算符;!=不等于運算符. 8級(左結合) &按位與運算符. 9級(左結合) ^按位異或運算符. 10級(左結合) |按位或運算符. 11級(左結合) &&邏輯與運算符. 12級(左結合) ||邏輯或運算符. 13級(右結合) ? :條件運算符. 14級(右結合) =、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 =賦值運算符. 15級(左結合) ,逗號運算符.
編輯本段運算符優先級與結合性
運算符的優先級:C語言中,運算符的運算優先級共分為15 級.1 級最高,15 級最低. 在表達式中,優先級較高的先于優先級較低的進行運算.而在一個運算量兩側的運算符 優先級相同時,則按運算符的結合性所規定的結合方向處理. 運算符的結合性:C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左).例如算術運算符的結合性是自左至右,即先左后右.如有表達式x-y+z 則y 應先與“-”號結合,執行x-y 運算,然后再執行+z 的運算.這種自左至右的結合 方向就稱為“左結合性”.而自右至左的結合方向稱為“右結合性”.最典型的右結合 性運算符是賦值運算符.如x=y=z,由于“=”的右結合性,應先執行y=z 再執行x=(y=z) 運算.C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤. 優先級從上到下依次遞減,最上面具有最高的優先級,逗號操作符具有最低的優先級. 所有的優先級中,只有三個優先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符.其它的都是從左至右結合. 具有最高優先級的其實并不算是真正的運算符,它們算是一類特殊的操作.()是與函數相關,[]與數組相關,而->及.是取結構成員. 其次是單目運算符,所有的單目運算符具有相同的優先級,因此在我認為的 真正的運算符中它們具有最高的優先級,又由于它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的. 另外在C語言里,沒有前置后置之分,因為++ -- 是右結合所以右側優先運算,表現為 "操作數后置優先級比較高" 的假象,前置和后置的區分是因為運算符重載而后加入C++的 接下來是算術運算符,*、/、%的優先級當然比+、-高了. 移位運算符緊隨其后. 其次的關系運算符中,< >=要比 == !=高一個級別,不大好理解. 所有的邏輯操作符都具有不同的優先級(單目運算符除外,!和~) 邏輯位操作符的"與"比"或"高,而"異或"則在它們之間. 跟在其后的&&比||高. 接下來的是條件運算符,賦值運算符及逗號運算符. 在C語言中,只有4個運算符規定了運算方向,它們是&&、| |、條件運算符及賦值運算符. &&、| |都是先計算左邊表達式的值,當左邊表達式的值能確定整個表達式的值時,就不再計算右邊表達式的值.如 a = 0 && b; &&運算符的左邊位0,則右邊表達式b就不再判斷. 在條件運算符中.如a?b:c;先判斷a的值,再根據a的值對b或c之中的一個進行求值. 賦值表達式則規定先對右邊的表達式求值,因此使 a = b = c = 6;成為可能.
編輯本段運算符優先級等級口訣及注釋
運算符優先級等級口訣
圓方括號、箭頭一句號, 自增自減非反負、針強地址長度, 乘除,加減,再移位, 小等大等、等等不等, 八位與,七位異,六位或,五與,四或,三疑,二賦,一真逗. 其中“,”號為一個等級分段.
運算符優先級等級注釋
“圓方括號、箭頭一句號”指的是第15級的運算符.其中圓方括號很明顯“()、[]”,箭頭 指的是指向結構體成員運算符“->”,句號 指的是結構體成員運算符“.” ; “自增自減非反負、針強地址長度”指的是第14級的運算符.其中 非 指的是邏輯運算符“!”,反 指的是按位取反運算符“~”,負 指的是負號運算符“-”,針 指的是指針運算符“*”,強 指的是強制類型轉換運算符,地址 指的是地址運算符“&”,長度 指的是長度運算符“sizeof ”; “乘除,加減,再移位”移位指的是左移運算符“”,其中除法還包括了 取余運算符“%”; “小等大等、等等不等” 指的是第10級到第9級的運算符:=,等等指的是等于運算符==,不等指的是不等于運算符!= “八位與,七位異,六位或”其中 八位與 指的是第8級的 按位與 運算符“&”,七位異 指的是第7級的按位異或 運算符“^”,六位或 指的是第6級的按位或運算符“|”; “五與,四或”指的是第5級、第4級的邏輯與運算符“&&”和邏輯或運算符“||”; “三疑,二賦,一真逗”指的是第3級到第1級的運算符.其中,三疑指的是條件運算符“?:” (三有雙重含義:即指優先級別是三,它的運算符類型也是三目,疑也取“?”之意),二賦 指的是賦值運算符=、+=、-=、*=、/=、%=、>>=、0,則執行if語句中的內容,否則退出. ·條件運算符:a=(b>0)?b:-b; 當b>0時,a=b;當b不大于0時,a=-b;其實上面的意思就是把b的絕對值賦值給a. ·逗號運算符:b=2,c=7,d=5;a=(++b,c--,d+3); 有三個表達式,用逗號分開,所以最終的值應該是最后一個表達式的值,也就是d+3=8,所以a=8.
總結
以上是生活随笔為你收集整理的c语言 正号运算符 作用,C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .Net Core 开发成长路线图
- 下一篇: python自己做个定时器_python