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

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

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

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

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

各种赋值 由右向左
, 逗号(顺序) 由左向右
时间: 2024-08-31 03:32:30

C语言运算符及其优先级汇总表口诀的相关文章

C语言运算符的优先级和结合性实例详解_C 语言

运算符是告诉编译程序执行特定算术或逻辑操作的符号.C语言的运算范围很宽,把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理.主要分为三大类:算术运算符. 关系运算符与逻辑运算符.除此之外,还有一些用于完成特殊任务的运算符. 先来看一个例子: #include <stdio.h> int main(){ int a=10,b=1,c=2; a=b=c; printf( "12+3*5=%d\n", 12+3*5); printf( "a=%d, c=%

C语言运算符优先级列表(超详细)_C 语言

每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖! C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) 对象.成员名 -- -> 成员选择(指针) 对象指针->成员名 --   2 - 负号运算符 -表达式 右到左 单目运算符 ~ 按位取反运算符 ~表达式 ++ 自增运算符

C语言运算符

C语言运算符 一.算术运算 C语言一共有34种运算符,包括常见的加减乘除运算. ①. 加法:+ 还可以表示正号 ②. 减法:- 还可以表示负号 ③. 乘法:* 非数学意义上的X ④. 除法:/ 注意1/2的值为0而非0.5 ⑤. 取余(模运算):两个整数相除之后的余数(注意两边都必须是整数,带符号只和左值有关) 注意点: ①. Int a=10.8;//数据精度丢失警告.结果为10--自动类型转换 ②. Int a=(int)10.8;//无警告.把10.8强制转换为整型--强制类型转换 ③.

浅谈JavaScript中运算符的优先级_javascript技巧

运算符优先级 JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出JavaScript运算符.具有相同优先级的运算符按从左至右的顺序求值. 运算符 描述 . [] () 字段访问.数组下标.函数调用以及表达式分组 ++ -- - ~ ! delete new typeof void 一元运算符.返回数据类型.对象创建.未定义值 * / % 乘法.除法.

C语言 运算符详细介绍及示例代码_C 语言

C 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐一介绍算术运算符.关系运算符.逻辑运算符.位运算符.赋值运算符和其他运算符. 算术运算符 下表显示了 C 语言支持的所有算术运算符.假设变量 A 的值为 10,变量 B 的值为 20,则: 运算符 描述 实例 + 把两个操作数相加 A + B 将得到 30 - 从第一个操作数中减去第二个操作数 A

《C++覆辙录》——2.3:(运算符)优先级问题

2.3:(运算符)优先级问题 本条款不讨论到底是伯爵夫人还是男爵夫人该在晚宴时坐在大使的旁座(此问题无解).我们要讨论的是在C++语言中的多层级化的运算符优先级如何带来一些令人困扰的问题. 优先级和结合性在一种程序设计语言中引入不同层级的运算符优先级通常来说是好事一桩,因为这样就可以不必使用多余的.分散注意力的括号而能把复杂表达式简化.(但是请注意,在复杂的或是比较晦涩的.亦即并非所有代码读者都能很好理解的表达式中显式地加上括号以表明意义,这是正确的想法.当然了,在那些平凡的.众人皆知的情况下一

C语言声明的优先级规则

<Expert C Programming>(<C专家编程>)中提到C语言声明的优先级规则如下: A 声明从它的名字开始读取,然后按照优先级顺序依次读取: B 优先级从高到低依次是: B.1 声明中被括号括起来的那部分: B.2 后缀操作符:括号()表示这是一个函数,而方括号[]表示这是一个数组: B.3 前缀操作符:星号*标识"指向--的指针": C 如果const和(或者)volatile关键字的后面紧跟类型说明符(如int,long等),那么它作用于类型说

vb.net运算符的优先级

在每个表达式中进行操作时,每一部分的运算都要按着一定的顺序进行计算,这个顺序就是运算的优先顺序,也叫运算符的优先级. 在表达式中,若运算符不只一种时,首先处理算术运算符,然后是比较运算符,最后是逻辑运算符.同一种运算符中,单目运算符的优先级高于双目运算符.优先级相同的运算符,按从左到右的顺序进行处理(求指运算除外). 字符串连接运算符(&)不是运算符,但就其优先级而言,它排在所有算术运算符之后,以及所有比较运算符之前. 还可以使用括号来改变有限顺序,强制命令表达式中的某些部分优先执行.在括号内部

java运算符的优先级

运算符的优先级决定了存在多个运算符时一个表达式各部分的计算顺序. Java对计算顺序作出了特别的规定. 其中,最简单的规则就是乘法和除法在加法和减法之前完成.程序员经常都会忘记其他优先级规则,所以应该用括号明确规定计算顺序. 例如: A = X + Y - 2/2 + Z; 为上述表达式加上括号后,就有了一个不同的含义. A = X + (Y - 2)/(2 + Z);