我一直在尝试用一些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
但是,当有很多条件并且每个子条件都必须包含约束时,效率非常低下。我确定必须在某个地方回答这个问题,并且这个问题可能是重复的,所以请指出答案。
答案 0 :(得分:0)
因此,您似乎了解(X+1)<=99 && (Y+1)<=99
的功能。让我们看一下((X+1) && (Y+1))<=99
:
&&
在每一侧都需要一个逻辑值。 a && b
将把a
和b
变成逻辑,实际上变成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
如果a
和b
的最大值小于99
,则a
和b
均小于99
。
(显然,该语句可以进一步简化为if max(X+1,Y+1)<=102
,因为如果第二个不等式比第一个不等式成立,则必须如此。)