この場合、なぜprintf()
呼び出されないのですか?その場合に使用できます&&
か?
{
int zz1,zz2;
zz1 = 8;
zz2= zz1 / 2;
if ( (zz1==! 0 ) && (zz2 ==! 1 ) ){
printf("!!!!!!!!!!");
}
}
==!
単一の演算子ではなく、実際には 2 つの演算子として解析されます。これは==
、!
コンパイラが常に最も長いトークンを選択するためです。そしてzz1==!0
、実際にzz1 == !0
です。
注:!0
は論理否定ゼロ、つまり==> 1 です。
条件が次の場合のコード:
zz1 == !0
==> zz1 == 1
==> 8 == 1 ==> False
または 0
0
&&
any expression
==> False
(短絡評価による)。printf をelse句に追加すると、それが実行されます。チェック@ideone .
&&
さらに、偶数で置き換えると、 and ==> ==> ==> ==> 0 ||
であるため、コードで printf() 関数が呼び出されないとします。zz2 = 4
zz2 ==! 1
zz2 == !1
zz2 == 0
4 == 0
そのため、0 || 0 == 0
if 条件が false になります。
私はあなたが書くと思います(zz1 != 0 ) && (zz2 != 1 )
。
実際(zz1 == !0 ) && (zz2 == !1 )
には有効な構文ですが、この場合、次のように記述しているため、望ましくない結果が生成されます。
zz1 equals to (not)0 AND zz2 equals to (not)1
zz1 equals to 1 AND zz2 equals to 0
printf
は呼び出されません多分あなたは書きたかった(zz1 != 0) && (zz2 != 1)
ですか?