C语言中的运算符优先级

C语言中的运算符优先级问题,一般是不要求我们记的,但如果能记住,对快速理解代码和编程是有很大帮助的;若能快速记住,何乐而不为呢?

如果你喜欢,建议先下载我整理的运算符优先级pdf文档(http://download.csdn.net/detail/n289950578/7964209),对照一起看,更有助于理解。

1、优先级:

为了理解方便,将优先级分为六大类,速记为《非123赋》:

非运算符  () [] . ->;

单目运算  (!&* 右->左);

双目运算  (左->右,最复杂,最重要部分);

三目运算  (X?A:B 右->左);

赋值运算  (*= 右->左);

逗号运算  (, 左->右);

除了双目运算,其他的每一大类都代表了一个优先级,自己合并了一首双目运算的打油诗,如下:

乘除/加减/左右移;

大等小等/等不等;

位与/异或/按位或;

逻辑与,/逻辑或。

//取余运算和除是相同的原理,为了方便组合诗,省去,理解就行

2、结合方向:

所谓的运算结合方向,指的是运算符优先级相同的时候,优先计算左边的还是右边的。

所有的双目运算和逗号运算都是从左至右,剩余的单目运算,三目运算和赋值从右至左;这个根本不用记,下面说明怎么去理解就行了。

单目:所有的单目运算都只有一个操作数,运算需要形成(运算符+操作数)的模型(a++,a--除外),需先确定操作数,再进行计算。所有的操作数都在右边从表面上看是先确定操作数,再结合运算符,即自右至左;这里的单目运算含了sizeof()和强制类型转换()。

双目:双目运算的时候,必须是(操作数+运算符+操作数)的模型,运算前必须先确定两个操作数,再结合操作符进行计算,按常规方向,即从左往右的顺序。

三目:X?Y:Z三目运算顺序为,先计算X,如果X的结果为真,再执行Y,否则执行Z。所谓右到左方向,仅限于多个嵌套结合时,很多人会误解右到左的过程,将计算方向理解为先Z再Y最后X,我之前就是这么理解的。

X?a:b?aa:bb => X?a:(b?aa:bb)而不是(X?a:b)?aa:bb,
(使用VC6.0单步汇编跟踪C得出的结论)。当然,实际使用当中,为避免误解,必须加上括号,没有人会这样写的,所以如果你不高兴,三目的方向性也可以不记。

赋值:可以像单目一样理解,只有先确定操作数,再结合运算符,才可以给目标对象赋值,自然也就自右至左了。

逗号:逗号运算没有任何特别的需要,按照常规顺序走就行,故自左往右的顺序。

当然,每个人的理解思维是不一样的,我这里只是分享了我的理解方法,若能结合自己的思维理解,其实是最快的,重在理解。非常欢迎大伙将自己的理解思路share出来!转载请注明来源:http://blog.csdn.net/n289950578/article/details/39502367

时间: 2024-08-10 15:11:51

C语言中的运算符优先级的相关文章

Java语言中的----运算符

day05 Java语言中的----运算符 一.运算符概述: 运算符的使用在每一门开发语言中都会使用到,在不同的语言中也会有不同的使用规则.通过运算符我们可以联想到MySQL数据库中的运算符,这些都是差不多的,可能有些在使用上是不一样的.下面就来看看Java中的运算符. 二.运算符: 1.算术运算符: 主要包含:加.减.乘.除.取余(%).自加(++).自减(--) 2.赋值运算符: 就是等号(=) 3.位运算符: 主要包含:&.|.~.^.<<.>>.>>&g

c语言中逗号运算符和逗号表达式

原文:c语言中逗号运算符和逗号表达式 C语言提供一种特殊的运算符——逗号运算符.用它将两个表达式连接起来.如: 3+5,6+8 称为逗号表达式,又称为“顺序求值运算符”.逗号表达式的一般形式为 表达式1,表达式2 逗号表达式的求解过程是:先求解表达式1,再求解表达式2.整个逗号表达式的值是表达式2的值.例如,上面的逗号表达式“3+5,6+8”的值为14.又如,逗号表达式 a=3*5,a*4对此表达式的求解,读者可能会有两种不同的理解:一种认为“3*5,a*4” 是一个逗号表达式,先求出此逗号表达

FreeMarker中的运算符优先级

FreeMarker中的运算符优先级如下(由高到低排列): 1,一元运算符:! 2,内建函数:? 3,乘除法:*, / , % 4,加减法:- , + 5,比较:> , < , >= , <= (lt , lte , gt , gte) 6,相等:== , = , != 7,逻辑与:&& 8,逻辑或:|| 9,数字范围:.. 实际上,我们在开发过程中应该使用括号来严格区分,这样的可读性好,出错少.

黑马程序员&mdash;&mdash;【黑马视频笔记】C语言基础之运算符优先级

1.运算符的优先级表   运算符的优先级(从高到低) 优先级 描述 运算符 1 括号 ().[] 2 正负号 +.- 3 自增自减,非 ++.--.! 4 乘除,取余 *./.% 5 加减 +.- 6 移位运算 <<.>>.>>> 7 大小关系 >.>=.<.<= 8 相等关系 ==.!= 9 按位与 & 10 按位异或 ^ 11 按位或 | 12 逻辑与 && 13 逻辑或 || 14 条件运算 ?: 15 赋值运

在语言中的运算符中,处于同一优先级别的运算符还分优先次序吗?

结合方向就是优先次序~~例如:*和/和%处于同一优先级,结合方向是自左向右,那么7*8/2%3的运算顺序就是7*8然后/2然后%3而赋值运算符+=和-=也处于同一优先级,结合方向是自右向左,那么7+=3-=2;运算顺序就是先算3-=2,结果为1,然后再算7+=1,结果为8~~~

转: C语言中位运算符异或“∧”的作用

转自: http://blog.sina.com.cn/s/blog_74a459380101d6xl.html 异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧0=0,0∧1=1,1∧1=0.如: 即071∧052,结果为023(八进制数). “异或”的意思是判断两个相应的位值是否为“异”,为“异”(值不同)就取真(1),否则为(0). 下面举例说明∧运算符的应用: (1)使特定位翻转 假设有01111010,想使其低4位翻转,即1

C语言中操作符的优先级和结合性的区别

引入: <C和指针>P83页有这样一个例子:a*b+c*d+e*f,并就该例子,对操作符的优先级和结合性进行了讲解. 为便于以下说明,我们对以上表达式中的操作符分别进行编号:乘号1.2.3和加号1.2 对于操作符的优先级我还比较能够理解,相邻操作符(比如说乘号1和加号1相邻,加号1和乘号2相邻--)的求值顺序,以优先级高的先执行.这种所谓的"相邻"是针对一个变量(如以上表达式中的b或c等). 问题: 但对于操作符的结合性,我就不太能理解了.书上是这么解释"结合性&

C语言中#和##运算符使用分析

#运算符 #运算符用于在预处理期将宏参数转换为字符串 #的转换作用是在预处理期完成的,因此只在宏定义中有效 编译器不知道#的转换作用 1 #define STRING(x) #x2 printf("%s\n",STRING(Hello World!)); ##运算符 ##运算符用于在预处理期粘连两个标识符 ##的连接作用是在预处理期完成的,因此只在宏定义中有效 编译器不知道##的连接作用 1 #include<stdio.h> 2 #define STRUCT(type)

C++中的运算符优先级

1   ()  []  .  ->2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   * / % 4   + - 5   >> <<  6   > >= < <= 7   == !=   8   &  9   ^   10  |   11  &&12  ||13  ?:14   =  +=  -=  *=  /=   %=  |=   ^=