C/C++运算符优先级关系
C/C++优先级 从高到低 1~14梯队
1、 () [] . ->
2、 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof
3 、 * / %
4 、 + -
5 、 >> <<
6 、 > >= < <=
7 、 == !=
8 、 &
9 、 ^
10、 |
11、 &&
12、 ||
13、 ?:
14 、 = += -= *= /= %= |= ^= &= >>= <<=
举例
常常分不清优先级了,需要加很多的括号,相当不受看,常用的如下几种情况就不用加括号
*p->x
&p->y
if(a==b+c)
if(a!=b>>1)
相反的,以下情况需要加括号
if(a==(b&c))
下边这个点需要注意:(当参与运算的位不纯时,其它位上的值会被当作真来影响结果,即C/C++虽然能进行位运算,但却是用整个字节中的所有位来进行运算的,然后整个字节中所有位的整体值为最终结果的)
int n = 2;
bool b1 = (n ^ 1);//true
bool b2 = (n ^ 2);//false
n = 3;
bool b3 = (n ^ 1);//true
bool b4 = (n ^ 2);//true
祝君精进!