- 只有三类运算符是右结合性【单目+赋值+问号】。
- ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
最重要的是要搞清楚运算符的优先级和运算顺序。
1. 括号是第一
2. 【右结合性】单目是其次
- 一般来说如果想考你优先级的话大概率是不会给你括号的。
- 因此一定记住单目运算符优先级是第二高的、而且他还是右结合
- 注意这个指针运算 ∗ * ∗和 + + , − − ++,-- ++,−−运算,这里经常会设置问题。
*p++表示:p++,然后再取该地址的值。即*(p++)
(*p)++表示:将p指向的这个值++
已知:int a[ ]={1,3,5,7}, y,*p= a;为使变量y的值为3,下列语句正确的是 D。
A) y=++*p++; 表示先将p++,然后取p指向的值1,然后++1,得到的是2,此时p指向的是a[1]了
B) y=++(*p++); 这个括号加了和没加没区别。
C) y=(++*p)++; c语言里面这是一种非法的表示(不过c++里面是合法的);就当作合法来看,先将++(*p),此时p指向的a[0]=2,然后再把a[0]++,输出结果是2。执行完了之后a[0]=3
D) y=(*++p)++; 先++p,此时p指向a[1],然后取*p的值3,进行++,得到的是3。执行完了之后a[1]的值是4
3. 加减乘除余
按照算术的计算顺序计算。
4. 移位
5. 关系运算符( ≤ , ≥ , < , > \leq,\geq,<,> ≤,≥,<,>高于 = , ! = =,!= =,!=)
4 > 3 & & 7 < 5 − ! 0 4>3\&\&7<5 - !0 4>3&&7<5−!0:先算算术、再比较、再逻辑运算
4 > 3 & & 7 < 4 4>3\&\&7<4 4>3&&7<4即0&&0=0
6. 位运算与亦或(与 高于 亦或 高于 或)
位运算:与& 高于 亦或~ 高于 或|
7. 逻辑与和或(与&& 高于 或|| )
在这里需要注意&&的优先级高于 ∣ ∣ || ∣∣
int x = 10; int y = (1 <= x && x <= 10 || 20 <= x && x <= 30); //等价于int y = ( (1 <= x && x <= 10) || (20 <= x && x <= 30));
补充:位运算高于逻辑(字符少的(&)比字符多的(&&)更牛)