运算符优先级 - 表达式求值
对于以下代码片段,我得到的输出为 1
。我想知道它是怎么来的?
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
对于以下代码片段,我得到的输出为 1
。我想知道它是怎么来的?
void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
i=x,被解释为
i=(x,反过来又被解释为
i=1<; z
,其值为 1。i=x<y<z;
, gets interpreted asi=(x<y)<z
, which in turn gets interpreted asi=1<z
, which evaluates to 1.10 小于 20,结果为 1,1 小于 5,结果为 1。C 不像其他一些语言那样链接关系运算符。
10 is less than 20, resulting in 1, and 1 is less than 5, resulting in 1. C doesn't chain relational operators as some other languages do.
其运作方式如下:
由于
<
是一个逻辑表达式,所以x即
10<20
为真,即1。所以它变成1 即
1<5
,这也是正确的,即1 被分配给i
。所以i
是1。It operates as follows:
Since
<
is a logical expression,x<y
i.e10<20
is true i.e 1. So it becomes1<z
i.e1<5
which is again true i.e. 1 which is assigned toi
. Soi
is 1.这是因为您的代码计算结果为:
This is because your code evaluates as:
你想要什么输出?
在C中,
what output did you want?
In C,
C++ 不支持这样的多部分比较。
被解释为
或 即,确定是否
x < y
,然后查看该布尔值是否小于z
。关于软件工程 StackExchange为什么有一些讨论。
当您发现自己尝试这样做时,您需要将其编写为由布尔值连接的两个单独的比较:
C++ doesn't support multi-part comparisons like that.
is interpreted as
or that is, determine if
x < y
, then see if that boolean is less thanz
.There's some discussion on why that is over at the software engineering StackExchange.
When you find yourself trying to do this, instead you need to write it as two separate comparisons joined by a boolean: