【问题标题】:Matlab why is logical not of tilde `~` not mentioned docs?Matlab为什么逻辑上不是波浪号`~`没有提到文档?
【发布时间】:2015-10-22 17:57:01
【问题描述】:

我见过一些代码使用:

index = findstr('something', 'longer string');
if ~isempty(index)
  % do something
end

我查了the documentation for MatLab symbols here,它没有提到使用~ 将原始整数值转换为布尔值。即,如果索引为 10 或[],则isempty 将返回 0 或 1,使用 ~ 运算符将其转换为 1 或 0。但是,文档中没有提到这个用例。这是执行否定的合法方式吗?还有其他方法可以实现这种否定吗?

【问题讨论】:

标签: matlab


【解决方案1】:

在工作区,输入

doc not

doc ~

你会从 Matlab 的文档中得到答案。

【讨论】:

    【解决方案2】:

    此用例在文档中准确提及您的链接指向的位置(请参阅“波浪号 -- ~”下的“不等于”和“逻辑非”)。您也可以在 MATLAB 控制台中输入help ~,获取使用说明。

    这是对布尔值进行取反的合法方式。您可以将其应用于 0 和 1 来翻转它们,但它也会将任何非零值视为 1。

    另一种对x 求反的方法是x = 1 - x,但仅当x 为布尔值时才有效。因此,对于您发布的代码,您可以这样做:

    index = findstr('something', 'longer string');
    if 1 - isempty(index)
      % do something
    end
    

    【讨论】:

    • 请注意,您也可以使用logical(10) 转换为布尔值,因此您可以使用1-logical(x)。但这基本上是~x
    • 我认为最初的问题是合理的。从“要测试数组 a 和 b 中的元素的不等式值是否不等,使用 a~=b”这一点并不明显,如果波浪号可以与原始整数值一起使用以及它会产生什么是有效的。链接到类似文档的“逻辑非”部分只讨论了数组:“要查找数组中为零的元素,请使用:~a”。当只提到使用数组时,对整数运算符的返回值做出假设是轻率的。
    • 当然,当然大多数其他语言都使用!而不是~。希望我的回答不会让人觉得这是一个坏问题。
    猜你喜欢
    • 2015-06-24
    • 2020-08-08
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2012-09-04
    • 2011-04-06
    相关资源
    最近更新 更多