优先级"/>
如何记得住C语言运算优先级
除了经常用之外,我看到了一篇文档,描述的非常清晰,可以秒速记住
.html
其中提到C语言的45个运算符,按照表中从上到下的顺序优先级依次降低,表中位于同一行的运算符优先级相同。
其实C语言运算运算符可以划分为4类。
第一类是根本不真正运算的运算符,如()、[]、->(取结构体或公用体指针成员)、.(取结构体或共同体成员)。
第二类是单目运算符,指的是参加运算符运算的对象只需要一个。如!、~、++、--、+(正号)、-(负号)、*(取指针指向的对象)、&(取地址)、(type)(强制类型转换)、sizeof等。
第三类是双目运算符,指的是参加运算符运算的对象必须为两个,如*、/、%、+、-、<<、>>、<、<=、>、>=、==、!=、&、^、&&、,(逗号运算符)等
第四类是三目运算符,指的是参加运算符运算的对象只需要三个,C语言仅有一个三目运算符?:。
二. 巧记
第一条规则:根本不真正运算的运算符优先级最高,例如()、[]、->(取结构体或共用体指针成员)、.(取结构体或共用体成员)。这四个运算符实际不作数学意义上的运算。
第二条规则:单目运算符高于双目运算符和三目运算符,同是单目运算符从右到左计算,例如:!、~ 、++、--、+(正号)、-(负号)、*(取指针指向的对象)、&(取地址)、(type)(强制类型转换)、sizeof等。
第三条规则:双目运算符中算术运算符优先级最高,其他次之。算术运算符之间遵循数学中的四则运算法则。
双目运算符中除了算术运算符之外,其他运算符的优先级关系是整个C语言运算符优先级关系中最难记忆的。笔者根据其优先级联系古代官场上的某种现象总结了一个口诀。
除了逗号运算符以外剩下的运算符(包括唯一的一个三目运算符)按照他们在C语言中的名称分为以下几种:
古代的官场存在一种不良的社会风气,人们称之为“跑官要官”
比如某甲想要升迁(移位运算),他很自然想到了去找关系(关系运算),他找关系也得合乎逻辑(逻辑运算),譬如找吏部尚书,就不能去找工部尚书,找到了关系,也要满足条件(条件运算) ,譬如任期满三年才能提拔,任期才一年就不能提拔。满足了条件就可以安置(赋值)新位子了。
根据以上总结,
想要“”移位“ 得找“关系”合乎“逻辑”满足“条件” “赋值”位子。
补充说明:
第一点:关系运算符中,==、!=优先级要低于其他关系运算符,两者之间相同。
第二点:逻辑运算符中& ^ : && 优先级从左到右依次降低。
第四条规则:逗号运算符优先级最低,所有单目运算符(包括三目)从右到左,所有双目运算符从左到右。
除了以上4条规则之外,还必须说明一点,标准的C语言编译器对运算符的解析遵循“最大贪婪”规则,所谓的 “最大贪婪”规则,就是当C 语言编译器对源程序进行词法分析时,如果运算符的下一个符号还是运算符,并且能和前一个运算符构成一个新的合法运算符时,编译器的词法分析器必须将其解析为两个运算符符号构成的新的运算符。(C语言中没有3个符号构成的运算符)
还看到一个口诀:
更多推荐
如何记得住C语言运算优先级
发布评论