web-dev-qa-db-ja.com

Cでの短絡と演算子の優先順位

Cの論理演算子は短絡に従うことを知っていますが、私の疑いは、短絡と演算子の優先規則が互いに対立していないことです。以下の例を参照してください。

#include<stdio.h>
int main()
{
    int a;
    int b=5;

    a=0 && --b;
    printf("%d %d",a,b);

    return 0;
}

優先規則によれば、最高の優先順位は前置演算子です。したがって、--bが最初に評価され、次に&&が評価され、最後にaに結果が割り当てられます。したがって、予想される出力は0 4になります。ただし、この場合、&&の2番目のオペランドは実際には実行されず、結果は0 5になります。

ここで優先ルールが適用されない理由。論理演算子は優先ルールから除外されていますか?はいの場合、他のどのようなオペレーターがそのような動作を示していますか?そして、この振る舞いの背後にある論理は何ですか?

7
Noshiii

_operator &&_の評価順序は左から右です。

_=_は優先順位が低く、実際には_ooperator ,_だけが_=_より優先順位が低くなっています。

したがって、式は、評価の順序が最初に与えられた場合、最初に評価されたa = (0 && --b)を読み取ります。

_0_はfalseに評価されるため、式の最初の部分がfalseである場合、_false && true_はfalseであるため、式の2番目の部分を評価する必要はありません。式は常にfalseになります。

_||_演算子がある場合、式の2番目の部分を評価する必要があります。

0
anastaciu

演算子の優先順位は、必ずしも式が最初に実行されるとは限りません。つまり、式が解析されて、優先順位の高い演算の結果が優先順位の低い演算で使用され、その逆は行われません。実際の式は、必要な場合にのみ評価されます。

0
DarkAtom