程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> C語言運算符及其優先級匯總表口訣

C語言運算符及其優先級匯總表口訣

編輯:更多關於編程
    由於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

    否定,按位否定,增量,減量,正負號,

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

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

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

    各種賦值
    由右向左
    , 逗號(順序)
    由左向右
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved