0

我对 MATLAB 布尔运算符有疑问。

非 ASCII 范围:

  • 0 - 2
  • 128以上

仅当上述范围内没有字符时,if 条件才成立。

if any( out.autoc < 128 & out.autoc ~= 0 & out.autoc ~= 1 & ...
        out.cprom < 128 & out.cprom ~= 0 & out.cprom ~= 1 )    
    fprintf(file_1, '%s,' , out.autoc);
    fprintf(file_1, '%s,' , out.cprom);
    fprintf(file_1, '\r\n');
else
    display(fileName);
end

当我执行以下操作时会出现问题:

if any( out.autoc < 128 & out.autoc > 2 & ...
        out.cprom < 128 & out.cprom > 2 )
    fprintf(file_1, '%s,' , out.autoc);
    fprintf(file_1, '%s,' , out.cprom);
    fprintf(file_1, '\r\n');
else
    display(fileName);
end

它没有按预期工作 - 条件似乎一直都是错误的。为什么?

4

1 回答 1

0

首先,您指定“ASCII 范围”为 [0, 2] 和 [129, 255]。据我所知,标准 ASCII 是 [0, 127],包括一些 30 多个控制字符。

接下来,您说“超过 128”,然后用“ < 128”检查。这意味着高于 127,而不是 128——对于 128 和 129,它都是错误的,我认为这不是你想要的,因为你说“高于 128”。但是,据我回忆,ASCII 并没有达到 128——它是从 0 到 127 的 7 位格式,包括 0 到 127。并且 127 应该是“删除”,所以我不确定在实践中是否包括 127 问题。

同样,您的第二个块有“ > 2”,它不包括 0、1 和 2(2 不大于 2)。重要的是,您的第一个块排除 2-仅 0 和 1。2 显然是“文本开头”,所以如果所有 ASCII 字符串都有它,我不会感到惊讶,这可以解释为什么第二个条件总是错误的。

于 2012-04-27T08:01:53.223 回答