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;

据我说 - x = 10 因为 y == z。z=10 并且被声明为等价于 y。然后将 y 的值分配给 x -x = y

4

9 回答 9

3

您将比较结果 »y等于z« 分配给x1即 ,即为真。

注意不同的运算符:

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

让我们进一步分解程序:

  1. 您初始化x为 5 和y10 z
  2. 您在不关心结果的情况下进行比较(见上文) 。所以这是可以安全地忽略的一条线。但它导致因为等于。yz1yz
  3. 您打印所有三个变量的当前值。
  4. 您执行相同的比较,这次将结果分配给x. x现在有值»y等于z«,1在这种情况下。
于 2012-07-29T12:00:32.270 回答
3

因为运算符优先级

x = y == z;

是相同的

x = (y == z);

现在 asy == z评估为 1,所以x value1在语句之后。

于 2012-07-29T12:00:43.780 回答
2

y == z 如果它们相同则返回 1,否则返回 0,并且结果设置为 x

于 2012-07-29T12:01:44.073 回答
2

==是一个比较运算符,因此如果两个操作数相等则返回 1 (true),否则返回 0 (false)。

该语句x = y == z等价于x = (y == z),因为==它的优先级高于=。因为 y 等于 z,这将分配1给 x。

于 2012-07-29T12:05:00.267 回答
1

请参阅运算符优先级表==(比较运算符)的优先级高于=(赋值运算符)。因此,首先执行 y == z,然后产生 1 的结果,因为 y 和 z 具有相同的值,这导致 x 被赋值为 1。

于 2012-07-29T12:01:31.657 回答
1

=是赋值运算符,==是比较运算符。你比较yz,它们是相等的,所以比较返回 true ,即 1。这个值被分配给x

于 2012-07-29T12:02:11.293 回答
1

操作员==首先行动。因此它变成 x= (y==z 的值); 现在因为 y 和 z 相同,所以 y==z 的值是 1,它被分配给 x。

于 2012-07-29T13:51:28.763 回答
0

==的优先级高于=

  1. 表达式y == z被计算为1
  2. 指令x = y == z放入。1_x
  3. 该指令printf("%d\n", x);打印x( 1) 的值。
于 2012-07-29T12:52:46.883 回答
0

运算符的优先级==高于=运算符。

y==z 计算为 1;因为两者都是平等的。

这个值被分配给 x。

于 2012-07-29T13:52:44.673 回答