0

我一直在尝试使用一些 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

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

4

1 回答 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)~=0and的真值(Y+1)~=0可能不同,但在这里你可以看到。在 MATLAB 中,与 相比,在非逻辑上下文中true等于。199


如果要简化此表达式,请使用max代替&&

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

如果和的最大值小于,则a和都小于。b99ab99

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

于 2019-04-10T19:28:32.657 回答