看一下程序 -
#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是这个程序的输出?
答案 0 :(得分:8)
x = y == z;
由编译器解析为x = (y == z);
,因为==
的{{3}}高于=
运算符的operator precedence 。
y == z
检查y
是否等于z
,并根据比较结果生成布尔值(0
或1
)。由于y = 6 = z
,y == 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=2
,y=6
和z=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;