对于以下代码段,我将输出作为1
。我想知道它是怎么来的?
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
答案 0 :(得分:7)
i=x<y<z;
被解释为i=(x<y)<z
,后者又被解释为i=1<z
,其评估为1。
答案 1 :(得分:2)
10小于20,导致1,1小于5,导致1. C不像其他语言那样链接关系运算符。
答案 2 :(得分:1)
它的运作方式如下:
由于<
是一个逻辑表达式,x<y
即10<20
为真,即1.因此它变为1<z
,即1<5
再次为真,即分配为1到i
。所以i
是1.
答案 3 :(得分:0)
这是因为您的代码评估为:
void main()
{
int x=10,y=20,z=5,i;
i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true
printf("%d",i);
}
答案 4 :(得分:0)
在C中,
i = 2 < 3; //i == 1.
i = 4 < 3; //i == 0.
如果condition的计算结果为false,则返回的值为0,否则为1 另外,x < y&lt; z将被评估为((x
答案 5 :(得分:0)
x<y // 1 as (10 < 20) will return 1
result of(x<y)<z // 1 as (1<5) will return 1
答案 6 :(得分:0)
C ++并不支持那样的多部分比较。
x < y < z
被解释为
(x < y) < z
或者确定是否x < y
,然后查看布尔是否小于z
。
为什么 over at the software engineering StackExchange进行了一些讨论。
当你发现自己试图这样做时,你需要把它写成两个由布尔结合的单独比较:
(x < y) && (y < z)