#include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
||を使用している場合、kの値は増加します 演算子ですが、&&の場合、値が増加していないため、その理由は非常に混乱しています。
出力は-2,3,0,1です
#include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
||を使用している場合、kの値は増加します 演算子ですが、&&の場合、値が増加していないため、その理由は非常に混乱しています。
出力は-2,3,0,1です
コードにテストがあります:
m = ++i && ++j || ++k;
このように複数のテストを使用する場合は、最初にを評価し++i && ++j
ます。それが真実である場合、あなたはその部分を決して評価しません(とにかく真実であるため)。これは遅延評価と呼ばれます。|| ++k
m
あなた++i && ++j
の例で偽だったとしたらk
、テストの最後の部分が評価されたので、は増加したでしょう。
これは遅延評価と呼ばれます。false && bは、bが何であれ常にfalseです。
あなたの場合:怠惰のために
m = ++i && ++j || ++k;
評価さm = true || ++k;
れないことにつながる++k
評価。
なぜなら、trueと評価されるように評価++k
されない++i && ++j
からです。
「&&」の演算子がゼロでない場合、それは真になり、残りの部分は使用されません。c では、ゼロでない場合は true です。
||
trueと評価される前の値が評価されない場合の式。
(c=10)|| (y=20)
この例では、はに評価されます。これにより、はc=10
評価されません。true
y=20
OR 条件は遅延評価されます。
条件の++k
最初の部分が真でないため、 は実行されません。