gpt4 book ai didi

matlab - 带有 'or' 运算符的 if 语句在交换条件时给出不同的结果

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:00 25 4
gpt4 key购买 nike

我正在使用 strfind 进行“或”比较,如下所示:

name='hello';
if strfind(name,'hello') | strfind(name,'hi')
disp('yes!')
end

>> yes!

if 语句必须评估为 true,因为显示了 yes!

相比之下,如果交换语句,MATLAB 不会返回 yes!:

if strfind(name,'hi') | strfind(name,'hello')
disp('yes!')
end

为什么?

最佳答案

这是因为短路。短路逻辑运算符可以加快代码速度。你可以拥有

if veryShort | superlongComputation

所以 MATLAB 所做的是首先计算 veryShort,如果为真,则无需计算第二个! if 条件已经满足。

在你的例子中 strfind(name,'hello') 返回 1,但是 strfind(name,'hi') 返回 [].

在第一个例子中,当第一个评估的东西返回 1 时,你就可以显示了。然而在第二种情况下,它返回 [],因此 MATLAB 计算 if 中的第二个东西,并返回 1。然后 MATLAB 应用 操作,其中 [] | 1 是一个 0x0 空逻辑数组,所以 if 不成立。

请注意,通常您希望使用 || 来强制短路,但是 | 也会这样做,如果它在 whileif:

https://uk.mathworks.com/matlabcentral/answers/99518-is-the-logical-operator-in-matlab-a-short-circuit-operator

关于matlab - 带有 'or' 运算符的 if 语句在交换条件时给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50177486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com