以下程序输出的说明

时间:2014-01-24 17:50:57

标签: c

看一下程序 -

#include<stdio.h>
int main()
{
    int x=2, y=6, z=6;
    x = y == z;
    printf("%d",x);
}

我认为输出为6.我认为z的值是6,z等于y。因此y具有值6.并且y(该值为6)被分配给x。所以我认为答案应该是6.但是在执行时我发现答案是1.任何人都可以解释,为什么1是这个程序的输出?

4 个答案:

答案 0 :(得分:8)

x = y == z;由编译器解析为x = (y == z);,因为==的{​​{3}}高于=运算符的operator precedence y == z检查y是否等于z,并根据比较结果生成布尔值(01)。由于y = 6 = zy == z返回1,导致x的值为1。因此输出为1

答案 1 :(得分:1)

我想, 你正在检查y == z。 (y == z)将返回一个布尔值。所以这将是真的(C中为1,C#中为真)。因此值为1。

答案 2 :(得分:1)

作业运算符从右到左工作。所以y == z将首先被执行。如果两个值相同或不相同,则在c中检查双等于运算符。如果它们是,它返回true,这只是c中的1。

然后将该值复制到x。 C没有布尔数据类型,它使用整数来存储布尔值。 1(或任何非零)表示真,0表示假。

如果您希望将z的值复制到x,则下面的行更合适......

x = y = z;更好,x = z;也可以。

答案 3 :(得分:1)

警告,自从我在c工作以来已经有一段时间了。

初始作业按预期工作。 x=2y=6z=6

关键是==是一个布尔等于运算符。所以它基本上要求y等于z?对或错?因此,您的行按此顺序进行评估:

x = y == z;  // Does y equal z?  Evaluates to TRUE because 6 equals 6

x = TRUE;  //  TRUE casts to 1 as an int

x = 1;