尽管不满足 && 条件,为什么这个 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 && 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
,因为如果第二个不等式成立,则第一个不等式成立。)
我一直在尝试使用一些 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 && 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
,因为如果第二个不等式成立,则第一个不等式成立。)