为什么输出1?

时间:2012-07-29 11:59:06

标签: c operators

#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

9 个答案:

答案 0 :(得分:3)

您将比较结果»y等于z«至x,即1,即为真。

请注意不同的运营商:

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

让我们进一步打破这个程序:

  1. 您将x初始化为5,将yz初始化为10。
  2. 您执行yz比较(见上文)而不关心结果。这是一条可以安全忽略的线。但由于1等于y
  3. ,因此会产生z
  4. 您打印所有三个变量的当前值。
  5. 您执行相同的比较,这次将结果分配给xx现在的值为{y等于z«,在这种情况下为1

答案 1 :(得分:3)

由于运算符优先级

x = y == z;

相同
x = (y == z);

现在y == z评估为1,因此x值在1之后为{{1}}。

答案 2 :(得分:2)

y == z如果相同则返回1,如果不相同则返回0,并将其结果设置为x

答案 3 :(得分:2)

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

声明x = y == z等同于x = (y == z),因为==的优先级高于=。因为y等于z,所以这会将1分配给x。

答案 4 :(得分:1)

请参阅Operator Precedence Table==(比较运算符)的优先级高于=(赋值运算符)。因此,首先执行y == z,然后将结果1作为y,并且z具有相同的值,这将导致x被赋值为1.

答案 5 :(得分:1)

=是赋值运算符,==是比较运算符。您比较yz,它们是相等的,因此比较返回true,即1.此值已分配给x

答案 6 :(得分:1)

==运算符首先执行。 因此它变成x =(y == z的值); 现在因为y和z是相同的,所以y == z的值是1,它被赋值给x。

答案 7 :(得分:0)

==的优先级高于=

  1. 表达式y == z的评估结果为1
  2. 指令x = y == z1放入x
  3. 指令printf("%d\n", x);打印x1)的值。

答案 8 :(得分:0)

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

y == z评估为1;因为两者都是平等的。

Thisn值被赋值给x。