0

#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です

4

6 に答える 6

4

コードにテストがあります:

m = ++i && ++j || ++k;

このように複数のテストを使用する場合は、最初にを評価し++i && ++jます。それが真実である場合、あなたはその部分を決して評価しません(とにかく真実であるため)。これは遅延評価と呼ばれます。|| ++km

あなた++i && ++jの例で偽だったとしたらk、テストの最後の部分が評価されたので、は増加したでしょう。

于 2012-11-02T09:06:00.707 に答える
2

これは遅延評価と呼ばれます。false && bは、bが何であれ常にfalseです。

あなたの場合:怠惰のために
m = ++i && ++j || ++k;評価さm = true || ++k;れないことにつながる++k評価。

于 2012-11-02T09:04:23.583 に答える
2

なぜなら、trueと評価されるように評価++kされない++i && ++jからです。

于 2012-11-02T09:04:46.653 に答える
2

「&&」の演算子がゼロでない場合、それは真になり、残りの部分は使用されません。c では、ゼロでない場合は true です。

于 2012-11-02T09:54:44.233 に答える
1

||trueと評価される前の値が評価されない場合の式。

(c=10)|| (y=20)

この例では、はに評価されます。これにより、はc=10評価されません。truey=20

于 2012-11-02T09:05:59.040 に答える
1

OR 条件は遅延評価されます。

条件の++k最初の部分が真でないため、 は実行されません。

于 2012-11-02T09:04:55.227 に答える