0
#include<stdio.h>

main()
{
       int x = 5, y = 10, z = 10;    

       x = y == z;          // This computational expression causes the value of x to be 1. I fail to understand why
       printf("%d\n", x); //Why is the value of x 1 here.

}

私はその声明を理解できませんx = y ==z;

私によると、y == zなので、x=10です。z = 10であり、yと同等であると述べられています。次に、yの値がxに割り当てられます-x = y

4

9 に答える 9

3

比較の結果 »Is yequal to z« をxに割り当て1ます。つまり、true です。

さまざまな演算子に注意してください。

x = ... // assignment
y == z  // comparison with either 0 (false) or 1 (true) result

プログラムをもう少し分解してみましょう。

  1. x5 とy10に初期化しzます。
  2. 結果を気にせずにとの比較(上記参照) を実行します。したがって、これは安全に無視できる行です。しかし、結果は と等しいので、になります。yz1yz
  3. 3 つの変数すべての現在の値を出力します。
  4. 同じ比較を実行し、今度は結果を に割り当てxます。xこの場合は、値 »Is yequal to z« を持ち1ます。
于 2012-07-29T12:00:32.270 に答える
3

演算子の優先順位のため

x = y == z;

と同じです

x = (y == z);

asy == zは に評価されるよう 1になったため、x value は1ステートメントの後にあります。

于 2012-07-29T12:00:43.780 に答える
2

y == z は、それらが同じ場合は 1 を返し、そうでない場合は 0 を返し、この結果が x に設定されます。

于 2012-07-29T12:01:44.073 に答える
2

==は比較演算子であるため、両方のオペランドが等しい場合は 1 (真) を返し、等しくない場合は 0 (偽) を返します。

は よりも優先順位が高いため、ステートメントx = y == zは と同等です。y は z と等しいため、これはx に割り当てられます。x = (y == z)===1

于 2012-07-29T12:05:00.267 に答える
1

オペレーターが最初に==行動します。したがって、x =(y == zの値)になります。yとzは同じであるため、y == zの値は1であり、xに割り当てられます。

于 2012-07-29T13:51:28.763 に答える
1

Operator Precedence Tableを参照してください。(比較演算子) は(代入演算子)==よりも優先されます。=したがって、y == z が最初に実行され、次に y と z が同じ値を持っているため 1 の結果が得られ、x には 1 の値が割り当てられます。

于 2012-07-29T12:01:31.657 に答える
1

=は代入演算子で==あり、比較演算子です。と を比較するyz、それらは等しいので、比較は true (1) を返します。この値は に割り当てられxます。

于 2012-07-29T12:02:11.293 に答える
0

演算子の優先順位は==演算子よりも高くなり=ます。

y==zは1と評価されます。両方が等しいので。

この値はxに割り当てられます。

于 2012-07-29T13:52:44.673 に答える
0

==よりも優先され=ます。

  1. y == zは に評価され1ます。
  2. 命令はをx = y == z入れます。1x
  3. この命令は( )printf("%d\n", x);の値を出力します。x1
于 2012-07-29T12:52:46.883 に答える