繁体   English   中英

为什么在不满足&&条件的情况下,if语句为什么会输出?

[英]Why does this if statement give an output despite the && conditions not being satisfied?

我一直在尝试用一些if条件执行一段代码。 这是它的简单版本。

X=100;Y=100;
if ((((X+1) && (Y+1))<=99) && (((X+1) && (Y+1))<=102))
    disp(X);
end

尽管X和Y都不满足第一个条件,但我仍然得到100的输出。我尝试了&和&&的所有组合以使and运算在工作中。 我检查了两者之间的差异,发现&是逻辑按位运算符,而&&是短路运算符,在这种情况下,它可能变化不大。 这种语法有什么错误?

当我这样做时,代码当然可以工作:

X=100;Y=100;
if (X+1)<=99 && (Y+1)<=99 && (((X+1) && (Y+1))<=102)
    disp(X);
end

但是,当有很多条件并且每个子条件都必须包含约束时,效率非常低下。 我确定必须在某个地方回答此问题,并且这个问题可能是重复的,所以请指出答案。

这样看来您了解(X+1)<=99 && (Y+1)<=99作用。 让我们来看((X+1) && (Y+1))<=99

&&在每一侧都需要一个逻辑值。 a && bab变成逻辑,有效地变成a〜 a~=0 && b~=0 从而:

((X+1)    && (Y+1)   ) <= 99
((X+1)~=0 && (Y+1)~=0) <= 99
( true    &&  true   ) <= 99
           1           <= 99
                      true

当然, (X+1)~=0(Y+1)~=0的真值可以不同,但​​是在这里您会看到。 在MATLAB中,与99相比,在非逻辑上下文中true等于1


如果要简化此表达式,请使用max而不是&&

X=100;Y=100;
if max(X+1,Y+1)<=99 && max(X+1,Y+1)<=102
    disp(X);
end

如果ab的最大值小于99 ,则ab均小于99

(显然,该语句可以进一步简化为if max(X+1,Y+1)<=102 ,因为如果第二个不等式成立,那么第一个不等式必须成立。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM