多语言展示
当前在线:238今日阅读:84今日分享:32

C语言进阶:[15]掌握运算符的优先级与结合性

C语言中的运算符十分丰富,运算符多那么就有优先级的问题了,我们经常的处理方法是加括号,但是有时候,看别人的代码有可能没有加括号,那么这时候对代码的理解就不会太准确,有一次看书的时候,关于这一块突然全都记住了,感觉还很简单,现把经验分享给大家。 首先罗列一下运算符,安装优先级从高到低的顺序: 运算符 结合性 () [] -> . (不是真正的运算符) 左结合 ! ~ ++ -- - (type) * & sizeof (单目运算符) 右结合 * / % (双目运算符--算术运算符) 左结合 + - (双目运算符--算术运算符) 左结合 << >> (双目运算符--移位运算符) 左结合 < <= > >= (双目运算符--关系运算符) 左结合 == != (双目运算符--关系运算符) 左结合 & (双目运算符--逻辑运算符) 左结合 ^ (双目运算符--逻辑运算符) 左结合 | (双目运算符--逻辑运算符) 左结合 && (双目运算符--逻辑运算符) 左结合 || (双目运算符--逻辑运算符) 左结合 ? : (三目运算符) 右结合 = (赋值运算符) 右结合 , 逗号运算符 左结合 从结合性上只有单目运算符和三目运算符以及赋值运算符是右结合的,意思是从右开始计算,例如 *p++,代表的含义是先让指针p执行++操作,然后在取值。() [] -> . 不是真正的运算符,它们的优先级最高,其次是单目运算符,混淆的地方是双目运算符,首先按分类走 算术运算符---->移位运算符---->关系运算符----->逻辑运算符。把这个顺序强记住,就对运算符优先级有多一半的了解了。其次就是每个分类里面的,算术里面好记,先乘除求余,后加减。关系里面==和!=小于< <= > >=.逻辑运算符里面位操作大于顺序逻辑运算符,并且逻辑运算符每一个优先级都不同。主要是双目运算符的大级别一定要牢记。这也得需要时间和代码的积累。看几个例子: 第一个例子由于逻辑运算符比关系运算符优先级低,导致flags & FLAG != 0 表示 flags & (FLAG!=0),结果大相径庭,第二个例子由于在定义时,进行连等,b和c还没有定义,导致错误,应该先定义,后进行连等赋值。 我们在工作中尽量加上()来区分优先级,这样自己和别人都一目了然。
推荐信息