C語言運算子及其優先順序匯總表口訣

來源:互聯網
上載者:User

由於C語言的運算子優先順序與C++的不完全一樣(主要是增加了幾個運算子),所以這個口訣不能完全實用於C++.但是應該能夠相容,大家可以比較一下他們的區別應該就能夠很快掌握C++的優先順序的 

C語言運算子及其優先順序匯總表口訣

圓下箭頭一頓號
非凡增減富強針地長
三乘除,四加減,五移位
千萬別把魚忘記,它在盛飯的廚子裡
小燈大燈燈燈不等
爸餵魚,舅疑惑,裸雞也疑惑
十三姨,十四父,十五逗,兜到低

“圓下箭頭一頓號”指的是第15級的運算子。其中圓指的是運算子(),下指的是下標運算子[],箭頭指的是指向結構體成員運算子->,頓號指的是結構體成員運算子、 
“非凡增減富強針地長”指的是第14級的運算子。其中非指的是邏輯運算子!,凡指的是按位取反運算子~,增減指的是自增和自減運算子++和--,富指的是負號運算子-,強指的是類型轉換運算子(類型),針指的是指標運算子*,地指的是地址運算子&,長指的是長度運算子Sizeof
“三乘除,四加減,五移位” 指的是第13級到第11級的運算子。其中三四五並無實際意義,只是起區分層級而已。也可以想象三指的是第13級運算子。乘除指的是乘法運算子*和除法運算子/,加減指的是加法運算子+和減法運算子-,移位指的是左移運算子<<和右移運算子>>
“千萬別把魚忘記,它在盛飯的廚子裡”指的是求餘運算子%,它位於盛飯的廚子裡,即指和乘法運算子、除法運算子在一起。
“小燈大燈燈燈不等” 指的是第10級到第9級的運算子。其中小燈大燈指的是關係運算子<、<=、>和>=,燈燈指的是等於運算子==,不等指的是不等於運算子!=
“爸餵魚,舅疑惑,裸雞也疑惑”指的是第8級到第4級的運算子。其中,爸餵魚之指的是第8級的按位與運算子&,舅疑惑指的是第7級的按位異或運算子^和第6級的按位或運算子||,裸雞也疑惑指的是第5級、第4級的邏輯與運算子&&和邏輯或運算子||
“十三姨,十四父,十五逗,兜到低” 指的是第3級到第1級的運算子。其中,十三姨指的是條件運算子?: (三有雙重含義,即指?:的優先順序別是三,它的運算子類型也是三目,?難道不是姨即疑 惑嗎?),十四父的十四沒有實際意義,父指的是賦值運算子=、+=、-=、*=、/=、%=、>>=、<<=、&=、 ^=和|= ,十五逗指的是第1級的運算子,兜到低指的是15級運算子以,結束。

附錄:C語言運算子及優先順序
優先順序        運算子        含義                  運算子類型       結合方向
15        ()        圓括弧                            單目           自左向右
        []        下標運算子                
        —>        指向結構體成員運算子                
        、        結構體成員運算子               
14        !        邏輯非運算子                                        自右向左

        ~        按位取反運算子                
        ++        自增運算子                
        --        自減運算子                
        -        負號運算子                
        (類型)        類型轉換運算子                
        *        指標運算子                
        &        地址運算子                
        Sizeof        長度運算子                
13        *        乘法運算子                            雙目          自左向右
        /        除法運算子                
        %        求餘運算子                
12        +        加法運算子                
        -        減法運算子                
11        <<        左移運算子                
        >>        右移運算子                
10        <、<=、>、>=        關係運算子                
9        ==        等於運算子                
        !=        不等於運算子                
8        &        按位與運算子                
7        ^        按位異或運算子                
6        |        按位或運算子                
5        &&        邏輯與運算子                
4        ||        邏輯或運算子                
3        ?:        條件運算子                          三目          自右向左

2        =、+=、-=、*=、
           /=、%=、>>=、
           <<=、&=、^=、|=   賦值運算子         雙目        
1        ,        逗號運算子                              雙目         自左向右 


括弧成員第一;        //括弧運算子[]() 成員運算子.  ->
全體單目第二;        //所有的單目運算子比如++ -- +(正) -(負) 指標運算*&
乘除餘三,加減四;   //這個"餘"是指取餘運算即%
移位五,關係六;    //移位元運算符:<< >> ,關係:> < >= <= 等
等於(與)不等排第七;    //即== !=
位與異或和位或;    //這幾個都是位元運算: 位與(&)異或(^)位或(|)     
"三分天下"八九十;  
邏輯或跟與           //邏輯運算子:|| 和 &&
十二和十一;            //注意順序:優先順序(||)  底於 優先順序(&&) 
條件高於賦值,       //三目運算子優先順序排到 13 位只比賦值運算子和","高//需要注意的是賦值運算子很多!
逗號運算級最低!   //逗號運算子優先順序最低

由於C語言的運算子優先順序與C++的不完全一樣(主要是增加了幾個運算子),所以這個口訣不能完全實用於C++.但是應該能夠相容,大家可以比較一下他們的區別應該就能夠很快掌握C++的優先順序的!  

((*strDest++=*strSrc++)!='');  :
重點:++後增運算子優先順序高於*
1.*strDest++相當於 *(strDest++)
2.由於是後自增,故執行順序為:

               *strDest=*strSrc
               strDest++ strsrc++  //該級順序不明
              將*strDest與''比較 //即,整個運算式的值為*strDest與''的比較結果

值得注意的是,對於賦值運算式,運算式本身的值等於左邊子運算式的值。

通過以上深入的分析,我們知道這個運算式完成了以下多個功能:

  1.對於指標strDest, strSrc,將strSrc所指的記憶體空間的值賦給由strDest所指的記憶體空間。

  2.判斷賦值後的strDest所指的記憶體空間的指是否等於0。

  3.對於指標strDest,strSrc,他們的值分別加1,即指向下一個元素。

即:該運算式實現了以下三個功能:

  1.對於指標strDest, strSrc,將strSrc所指的記憶體空間的值賦給由strDest所指的記憶體空間。

  2.判斷賦值後的strDest所指的記憶體空間的值是否等於0。

  3.對於指標strDest,strSrc,他們的值分別加1,即指向下一個元素。

C語言運算子表

運算子按照優先順序大小由上向下排列,在同一行的運算子具有相同優先順序。第二行是所有的一元運算子。
 

運算子 解釋 結合方式
() [] -> . 括弧(函數等),數組,兩種結構成員訪問 由左向右
! ~ ++ -- + - 

* & (類型) sizeof

否定,按位否定,增量,減量,加號或減號,

間接,取地址,類型轉換,求大小

由右向左
* / % 乘,除,模數 由左向右
+ - 加,減 由左向右
<< >> 左移,右移 由左向右
< <= >= > 小於,小於等於,大於等於,大於 由左向右
== != 等於,不等於 由左向右
& 按位與 由左向右
^ 按位異或 由左向右
| 按位或 由左向右
&& 邏輯與 由左向右
|| 邏輯或 由左向右
? : 條件 由右向左
= += -= *= /= 

&= ^= |= <<= >>=

各種賦值 由右向左
, 逗號(順序) 由左向右

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.