【C语言】运算符优先级

  • 只有三类运算符是右结合性【单目+赋值+问号】。
  • ! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

    文章目录

      • 1. 括号是第一
      • 2. 【右结合性】单目是其次
      • 3. 加减乘除余
      • 4. 移位
      • 5. 关系运算符( ≤ , ≥ , < , > \leq,\geq,<,> ,,<,>高于 = , ! = =,!= =,!=
      • 6. 位运算与亦或(与 高于 亦或 高于 或)
      • 7. 逻辑与和或(与&& 高于 或|| )
      • 8. 【右结合性】问号运算符
      • 9. 【右结合性】赋值运算符(=最高,+= 高于 &= 高于 <<= )
      • 10. 逗号运算符

最重要的是要搞清楚运算符的优先级和运算顺序。

1. 括号是第一

【C语言】运算符优先级_第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

【C语言】运算符优先级_第2张图片

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));

【C语言】运算符优先级_第3张图片

补充:位运算高于逻辑(字符少的(&)比字符多的(&&)更牛
【C语言】运算符优先级_第4张图片

8. 【右结合性】问号运算符

9. 【右结合性】赋值运算符(=最高,+= 高于 &= 高于 <<= )

【C语言】运算符优先级_第5张图片

10. 逗号运算符

你可能感兴趣的:(C语言基础,c语言,开发语言,后端)