C语言运算符及其优先级汇总表口诀

 更新时间:2013年07月22日 18:35:19   作者:  
由于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++)!='\0');  :
重点:++后增运算符优先级高于*
1.*strDest++相当于 *(strDest++)
2.由于是后自增,故执行顺序为:

               *strDest=*strSrc
               strDest++ strsrc++  //该级顺序不明
              将*strDest与'\0'比较 //即,整个表达式的值为*strDest与'\0'的比较结果

值得注意的是,对于赋值表达式,表达式本身的值等于左边子表达式的值。

通过以上深入的分析,我们知道这个表达式完成了以下多个功能:

  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

否定,按位否定,增量,减量,正负号,

间接,取地址,类型转换,求大小

由右向左
* / % 乘,除,取模
由左向右
+ - 加,减
由左向右
<< >> 左移,右移
由左向右
< <= >= > 小于,小于等于,大于等于,大于
由左向右
== != 等于,不等于
由左向右
& 按位与
由左向右
^ 按位异或
由左向右
| 按位或
由左向右
&& 逻辑与
由左向右
|| 逻辑或
由左向右
? : 条件
由右向左
= += -= *= /= 

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

各种赋值
由右向左
, 逗号(顺序)
由左向右

相关文章

  • 浅谈C++中replace()方法

    浅谈C++中replace()方法

    C++编程语言中的string应用方式多样化,每一种应用方式都能帮助我们提实现特定的功能需求。在这里我们将会为大家详细介绍一下其中一个比较重要的用法,有关C++ replace()函数的应用方式,需要的朋友可以参考下
    2015-11-11
  • 深入解析C++中的字符数组和处理字符串的方法

    深入解析C++中的字符数组和处理字符串的方法

    这篇文章主要介绍了深入解析C++中的字符数组和处理字符串的方法,需要的朋友可以参考下
    2015-09-09
  • C语言实现天气信息管理系统

    C语言实现天气信息管理系统

    这篇文章主要介绍了C语言实现天气信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 详解C语言中printf输出的相关函数

    详解C语言中printf输出的相关函数

    这篇文章主要介绍了C语言中printf输出的相关函数总结,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C语言实现简单井字棋游戏

    C语言实现简单井字棋游戏

    这篇文章主要为大家详细介绍了C语言实现简单井字棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • C语言内存对齐实例详解

    C语言内存对齐实例详解

    这篇文章主要介绍了C语言内存对齐,包括内存对其的基本概念及用法,以及注意事项,并以实例形式加以说明,需要的朋友可以参考下
    2014-09-09
  • C++实现 单例模式实例详解

    C++实现 单例模式实例详解

    这篇文章主要介绍了C++实现 单例模式实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • 优先队列(priority_queue)的C语言实现代码

    优先队列(priority_queue)的C语言实现代码

    本文简要介绍一种基于数组二叉堆实现的优先队列,定义的数据结构和实现的函数接口说明如下
    2013-10-10
  • C/C++字符串函数之复制函数详解

    C/C++字符串函数之复制函数详解

    下面小编就为大家带来一篇C/C++字符串函数之复制函数详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • opencv3/C++基于颜色的目标跟踪方式

    opencv3/C++基于颜色的目标跟踪方式

    今天小编就为大家分享一篇opencv3/C++基于颜色的目标跟踪方式,具有很好的参考价值,希望对的有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论