この場合、なぜ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 = 4zz2 ==! 1 zz2 == !1 zz2 == 0 4 == 0
そのため、0 || 0 == 0if 条件が 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 0printfは呼び出されません多分あなたは書きたかった(zz1 != 0) && (zz2 != 1)ですか?