コード:
#include<stdio.h>
int main()
{
int j = 7, i = 4;
j = j || ++i && printf("you can");
printf("%d %d",i,j);
return 0;
}
出力:4 1
[コードリンク][1]
- プレフィックス演算子の優先順位は、論理演算子よりも高くなります。2.
&&
論理は論理よりも優先され||
ます。 - 論理AND(
&&
)では、最初のオペランドが2番目よりもfalseと評価された場合は評価されず、論理OR(||)
1番目のオペランドがと評価されたtrue
場合、2番目は評価されません。 - 完全な式はに評価されている
true
ため、jは1です。
疑問:
ここで最初のルールに従わないのはなぜですか?それは正しいべきではありませんか?
j=(j||((++i) &&printf("you can")));
したがって、ステートメントの値はi
5になります。printf
ここで一般的な優先順位の規則に違反しているのはなぜですか?結合性は、2つの演算子の優先順位が同じ場合に機能します。コンパイラは最初に評価するかどうかを確認するべきではありません||
か&&
?
が最初に評価された場合||
、これは私の知識によるものではないはずですが、結果は正しいです。ただし、最初に評価されない場合は、can51を印刷する必要があります。