0

C の後置演算子と前置演算子の優先順位と混同しています。ヘルプとヒントがあれば役立ちます。

ここにテスト コードを貼り付けます。

#include <stdio.h>

int a = 0;

int main(int argc, char *argv[])
{
   if (++a & 0x01) // prefix version
   // if (a++ & 0x01) // postfix version
   {
      printf("++ first\n");
   }
   else
   {
      printf("& first\n");
   }
   return 0;
}

postfix ++後置バージョンでは、優先順位は高くなりますが、ここでwitha++に戻り、この式の後に の値をインクリメントすることがわかりました。0&0x01a

しかし、私が理解できないのは、なぜプレフィックスバージョンで++a最初に評価されるのですか? 演算子の優先順位表は、prefix ++&が同じ優先順位を持ち、さらにそれらの結合性が であることを示していright-to-leftます。これは、最初に評価する必要があることを意味しません&か?

編集: 私が使用しているチャート: C Operator Precedence Table

4

2 に答える 2

7

優先順位表をもう一度確認してください。単項アドレス演算子&とバイナリ ビット AND演算子を混同している可能性があると思います&

参照: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence

この解釈ではa、ビットごとの AND を適用する前にインクリメントします。

于 2014-03-06T03:25:17.913 に答える