首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C:带多个运算符的条件表达式

问C:带多个运算符的条件表达式
EN

Stack Overflow用户
提问于 2012-09-23 02:49:14
回答 4查看 624关注 0票数 0

在C语言中,这样的事情合法吗?

代码语言:javascript
复制
if (0<=x<=y<=y+1) then ...

或者我必须用&&和||和括号来分隔它?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-23 02:52:35

这是合法的,但可能不会像您期望的那样。它被认为是你写的:

代码语言:javascript
复制
if (((0 <= x) <= y) <= y+1)

(0 <= x)的计算结果为0或1;将0或1与y进行比较,得到另一个0或1结果;将其与y+1进行比较,得到用于控制if语句的最终0或1。

如果您的目标是确保x不小于零或大于y,并确保y不大于y+1,那么您应该这样写:

代码语言:javascript
复制
if (0 <= x && x <= y && y <= y+1)

我注意到y <= y+1通常是正确的。如果y是无符号类型并且等于该类型的最大值,则y+1为0。如果y是一个带符号的类型,并且等于该类型的最大值,则可以通过将其加1来调用未定义的行为。如果你很幸运,y+1会将带符号类型的最大负值换成负值,但是你不能依赖它(所以这可能会让它成为“如果你不走运”,因为bug不一定会在引发重大问题之前出现)。

票数 7
EN

Stack Overflow用户

发布于 2012-09-23 02:52:57

它是合法的(而且是有定义的;谷歌搜索术语'operator operator‘),但我不认为它会做你期望或想要做的事情。

票数 3
EN

Stack Overflow用户

发布于 2012-09-23 02:52:17

不,这根本不可能做你想做的事情,尽管它是合法的C代码。您必须使用&&或||。原因是,您实际上看到的是,例如,y是否大于或等于布尔值,在C和C++中,布尔值通常只是0和1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12546731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档