-5
int a = 2, b = 3, c = 5, d = 4, e = 1;

if ((a = b > c ? d : e) == e) a++;

答えは a=2

これが実際に何をしているのかわかりません。

このコード ブロックが何をするのか、順を追って説明できますか?

4

6 に答える 6

6
if ((a = b > c ? d : e) == e) a++;

に等しい:

if (b > c)
    a = d;
else
    a = e;
if (a == e)
    a++;

こちらもご覧ください: C ++で行う?

于 2013-05-09T17:28:36.000 に答える
2

理解するには、if 条件を構成する必要があります。

if ((a = b > c ? d : e) == e) a++;

最初に課題があります

a = b > c ? 日:え

それは言う: b > c なら a = d、そうでなければ a = e

この場合、3 > 5 は false なので、

a = eだからa = 1

それから別の評価があります

if(a==e) a++;

この場合、a = e = 1 なので、a++ -> a = 2 となります。

役に立てば幸いです;)

于 2013-05-09T17:39:32.090 に答える
0

これがあなたが知りたいメインスポットだと思います

? b : c は条件演算子と呼ばれ、a が true の場合は b を使用し、そうでない場合は c を使用することを意味します。

(a = b> c? d : e) 

ちょうど等しい

if(b>c)
  a = d;
else 
  a = e;
于 2013-05-09T17:29:06.867 に答える
0

最初に、このコードの実行後に変数を見ると、何も起こっていないように見えます。しかし、それは本当ですか?

LiHo はすでにこれを分解し、それをより読みやすいコードに「変換」する方法を示しており、彼のコードを使用すると、何が起こっているかを簡単に確認できるはずです。でも楽しみのために、それを分解して、与えられた数を考えてみましょう。

if ((a = b > c ? d : e) == e) a++;

これは次の形式です。

if(<something> == e) a++;

私たちはそれが何を意味するかを知っています。<something>それでは、次の部分に注目しましょう。

(a = b > c ? d : e)

C++ 演算子の優先順位リストを見ると、三項演算子 ( ?:) が より上位にランク付けされている=ため、最初に評価されることがわかります。

b > c ? d : e

これは美化されたifステートメントです。「bより大きい場合cは を返しd、そうでない場合eは を返します。両方の値があり、bそれが より大きくないcこともわかっています。したがって、このステートメントが を返すことがわかります。35e

ここで、式を少し単純化しました。

(a = e)

これは課題です。aに等しくなるように設定しますe。ここで、さらにコンテキストを取得するために一歩戻ります。

if((a = e) == e) a++;

ここで何が起こるかというと、操作が実行された後、結果が返されます。(a = e)その結果は、便利なことに、代入a 後の の値です。したがって、次のようになります。

if(a == e) a++;

aに等しいe(つまり に等しい1)に設定したので、ifが実行され、からにa++インクリメントされます。a12

何も起こらなかったように見えますが、実際には多くの作業を行ってきました。

于 2013-05-09T18:01:19.763 に答える