尽管&&条件不满足,为什么这个if语句会给出输出?

问题描述 投票:0回答:1

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

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

尽管X和Y都不满足第一个条件,但我仍然得到输出为100.我已经尝试了&和&&的所有组合来完成和操作。我检查了两者之间的区别,我发现&是一个逻辑按位运算符,而&&是一个短路运算符,在这种情况下可能没有太大变化。这种语法有什么错误?

当然,代码在我执行此操作时有效:

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

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

matlab syntax short-circuiting logical-and
1个回答
0
投票

所以看起来你了解(X+1)<=99 && (Y+1)<=99的作用。我们来看看((X+1) && (Y+1))<=99

&&每侧需要一个逻辑值。 a && b将把ab变成逻辑,有效地成为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中,true在非逻辑上下文中等于1,与99相比。


如果要简化此表达式,请使用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,因为如果第二个不等式保持不变,那么第一个不等式。)

© www.soinside.com 2019 - 2024. All rights reserved.