用发呆的时间来理清自己的思绪
分类: C/C++
2013-12-25 15:16:08
接触C语言已经有好多年了,但是对于C语言中的各种运算符总是搞不清楚,尤其是对各种运算符的优先级更是头疼,相信大家有和我一样的感受吧,通过查阅资料现就各种运算符的优先级总结如下:
C语言中一般有初等运算符、单目运算符、算术运算符、关系运算符、位运算符、逻辑运算符、条件运算符、符合运算符和逗号运算符,一共有十五个优先级:
1 () [] . -> (初等运算符)
2 !(逻辑非) ~(按位取反) -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof (单目运算符)
3 * / % (算术运算符:一共5个(+、-、*、/、%),先乘除、后加减)
4 + - (算术运算符:一共5个,先乘除、后加减)
5 >> << (位运算符:一共6个(&、|、~、^、>>、<<),左移、右移)
6 > >= < <= (关系运算符:6个)
7 == != (关系运算符:6个)
8 & (位与)
9 ^ (位异或)
10 | (位或)
11 && (逻辑与)
12 || (逻辑或)
13 ?: (条件运算符,C语言中唯一一个三目运算符)
14 = += -= *= /= %= |= ^= &= >>= <<= (复合运算符)
15 , (逗号运算符,优先级最低)
总结,C语言中比较有特色的位运算符的优先级比较分散,比如按位取反(~)运算在算术运算符之前,<<和>>运算符在关系运算符之前,而&、|、^运算符在关系运算符之后,因此,为了避免发生逻辑上的错误,在使用位运算符时建议加上括号。
注意:从总结中可以发现,运算符的优先级规律是从高到低依次为:单目运算符---->算术运算符---->移位运算符---->关系运算符---->位运算---->逻辑运算符---->三目运算符---->赋值运算符---->逗号运算符。