目录
一、错误案列
二、优先级规律
1.优先级表
2.优先级总结
一、错误案列
1.flag的二进制表达式中只有一个1,现在判断flags二进制形式在flag为1的那一位上是否也为1:
if(flag & flags !=0);
2.将getc函数的返回值赋给c并判断是否为EOF:
while(c=getc(in)!=EOF);
3.类似2的问题再复杂些:
if(t=BTYPE(pt1->aty)==start || t==UNION);
以上都是有优先级问题的代码,你都能发现他们的问题吗,如果不能,来看看下面对优先级的解读和记忆。
二、优先级规律
1.优先级表
[结合性指的是编译器解释的顺序。例如:a,b,c自左向右解释为(a,b)c 而不是a,(b,c) ]
2.优先级总结
①()[ ] -> . 这类非运算符优先级为1 。
②单目操作符优先级为2,类型转化也是单目操作符哦。 (自右至左)
③双目操作符优先级为3,其中
1.算数操作符(% / *) > (+ -)
2.移位操作符(>> <<)
3.关系操作符(> ,< , >= ,<= )> (== !=)
4.位操作符(& > ^ > |)
5.逻辑操作符(&& > ||)
6.赋值操作符(= += -= &= ……) (自右至左)
④三目操作符优先级为4,(?:) (自右至左) [例如:(a?b,(c?,d,e ) )]
⑤,优先级为5
小提醒:在涉及赋值操作符时和容易发生错误,要考虑有无必要加上()