【发布时间】:2011-07-24 12:16:36
【问题描述】:
对于以下代码 sn-p,我得到的输出为 1。我想知道它是怎么来的?
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
【问题讨论】:
标签: c operator-precedence
对于以下代码 sn-p,我得到的输出为 1。我想知道它是怎么来的?
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
【问题讨论】:
标签: c operator-precedence
这是因为您的代码评估为:
void main()
{
int x=10,y=20,z=5,i;
i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true
printf("%d",i);
}
【讨论】:
i=x<y<z;,被解释为i=(x<y)<z,而i=1<z又被解释为i=1<z,计算结果为1。
【讨论】:
warning: comparisons like 'X<=Y<=Z' do not have their mathematical meaning
你想要什么输出?
在 C 中,
i = 2 < 3; //i == 1.
i = 4 < 3; //i == 0.
如果条件评估为假,则返回值为 0,否则返回 1。
此外,x
【讨论】:
10 小于 20,结果为 1,1 小于 5,结果为 1。C 不像其他一些语言那样链接关系运算符。
【讨论】:
x<y // 1 as (10 < 20) will return 1
result of(x<y)<z // 1 as (1<5) will return 1
【讨论】:
它的操作如下:
由于< 是一个逻辑表达式,x<y 即10<20 为真,即1。所以它变为1<z,即1<5,它再次为真,即分配给i 的1。所以i 是 1。
【讨论】:
C++ 不支持这样的多部分比较。
x < y < z
被解释为
(x < y) < z
也就是判断是否x < y,然后看那个boolean是否小于z。
有一些关于为什么的讨论是over at the software engineering StackExchange。
当您发现自己尝试这样做时,您需要将其编写为两个单独的比较,并由一个布尔值连接:
(x < y) && (y < z)
【讨论】: