运算符

运算符+ - * / % > < >= <= == != & | ^以及各种复合赋值运算符要求两边的操作数类型一致,条件运算符?:要求后两个操作数类型一致,这些运算符在计算之前都需要做Usual Arithmetic Conversion。

下面按优先级从高到低的顺序总结一下C语言的运算符,每一条所列的各运算符具有相同的优先级,对于同一优先级的多个运算符按什么顺序计算也有说明,双目运算符就简单地用“左结合”或“右结合”来说明了。

  1. 标识符、常量、字符串和用括号套起来的表达式是组成表达式的最基本单元,在运算中作操作数,优先级最高。
  2. 后缀运算符,包括数组取下标[]、函数调用()、结构体取成员.、指向结构体的指针取成员->、后缀自增++、后缀自减--。如果一个操作数后面有多个后缀运算符,按照离操作数从近到远的顺序(也就是从左到右)依次计算,比如a.name++,先算a.name,再++,这里的.name应该看成a的一个后缀,而不是把.看成双目运算符。
  3. 单目运算符,包括前缀自增++、前缀自减--sizeof、类型转换()、取地址运算&、指针间接寻址*、正号+、负号-、按位取反~、逻辑非!。如果一个操作数前面有多个前缀,按照离操作数从近到远的顺序(也就是从右到左)依次计算,比如!~a,先算~a,再求!
  4. *、除/、模%运算符。这三个运算符是左结合的。
  5. +、减-运算符。左结合。
  6. 移位运算符<<>>。左结合。
  7. 关系运算符< > <= >=。左结合。
  8. 相等性运算符==!=。左结合。
  9. 按位与&。左结合。
  10. 按位异或^。左结合。
  11. 按位或|。左结合。
  12. 逻辑与&&。左结合。
  13. 逻辑或||。左结合。
  14. 条件运算符:?。注意:例如a ? b : c ? d : e是看成(a ? b : c) ? d : e还是a ? b : (c ? d : e)呢? C语言规定是后者。
  15. 赋值=和各种复合赋值*= /= %= += -= <<= >>= &= ^= |=。在双目运算符中只有赋值和复合赋值是右结合的。
  16. 逗号运算符。左结合。
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap