运算符

运算符的元数,一个优先级关联性

  • Arity 表示操作数的数量。在 C 中,存在三种不同的运算符:

    • 一元(1 个操作数)
    • 二进制(2 个操作数)
    • 三元(3 个操作数)
  • 优先级表示哪些运算符首先绑定到它们的操作数。也就是说,哪个运算符优先对其操作数进行操作。例如,C 语言遵循乘法和除法优先于加法和减法的约定:

    a * b + c
    

    给出相同的结果

    (a * b) + c
    

    如果这不是想要的,可以使用括号强制优先级,因为它们具有所有运算符的最高优先级。

    a * (b + c)
    

    这个新表达式将产生一个与前两个表达式不同的结果。

    C 语言有许多优先级; 下面给出了所有运算符的表,按优先级的降序排列。

    优先表

    运算符 关联性
    () [] -> . 左到右
    ! ~ ++ -- + - *(dereference)(type) sizeof 右到左
    *(乘法)/ % 左到右
    + - 左到右
    << >> 左到右
    < <= > >= 左到右
    == != 左到右
    & 左到右
    ^ 左到右
    | 左到右
    && 左到右
    || 左到右
    ?: 右到左
    = += -= *= /= %= &= ^= |= <<= >>= 右到左
    , 左到右
  • 关联性表示默认情况下等同优先级运算符的绑定方式,有两种: 从左到右从右到左从左到右绑定的一个例子是减法运算符(-)。表达方式

    a - b - c - d
    

    有三个相同的优先级减法,但给出相同的结果

    ((a - b) - c) - d
    

    因为最左边的 - 首先绑定到它的两个操作数。

    从右到左关联的一个例子是取消引用*和后增量++运算符。两者都具有相同的优先级,因此如果它们用在诸如的表达式中

    * ptr ++
    

    ,这相当于

    * (ptr ++)
    

    因为最右边的一元运算符(++)首先绑定到它的单个操作数。