運算子

運算子的元數,一個優先順序關聯性

  • 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 ++)
    

    因為最右邊的一元運算子(++)首先繫結到它的單個運算元。