C操作符优先级分类记忆

曾经以为不需要记住C语言的操作符的优先级,但是现在发现加括号实在是太烦了,还是试着记吧。

举例:

常见错误1: if (flags & FLAG != 0) ...

解析:!= 比&有更高优先级,相当于if (flags & (FLAG != 0))

常见错误2:r = h<<1 + 2

解析:+比<<有更高优先级,相当于 r = h<<(1+2)

常见错误3: while ( c = getc(in) != EOF)

解析:赋值运算符优先级最低,相当于 while ( c = (getc(in) != EOF))

总结:

C语言有15个操作符优先级,而且每个操作符还有不同的结合型,所以必须要分类记忆。以下从上到下,从左至右优先级由高到低:

第一级,下标操作符[],函数调用(),结构体运算符->与.。结合型为左到右

第二级,一元操作符,包括逻辑非!,按位取反~,自增/自减操作符++/--,负号运算符-,类型转换,指针*,取地址&,sizeof。结合性为右到左

第三级,二元操作符,包括加减乘除,左移右移操作符<</>>,关系运算符</>/<=/>=,等于不等于=/!=,然后是

    按位与&, 按位异或^,按位或|,最后是逻辑与,逻辑或,条件运算符。除条件运算符外,结合性都为左到右

第四级,所有的赋值运算符,逗号运算符。赋值结合性为左到右,逗号运算符为右到左。

原文地址:https://www.cnblogs.com/dracohan/p/3007232.html