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

期待どおりに動作しません - 条件は常に false のようです。なんで?

4

1 に答える 1

0

まず、「ASCII範囲」が[0、2]および[129、255]であることを指定します。私の知る限り、標準のASCIIは[0、127]で、30個の奇数の制御文字が含まれています。

次に、「128以上」と言いますが、「< 128」で確認します。これは、128ではなく127を超えることを意味します。「128を超える」と言うので、128と129については誤りになりますが、これはあなたが望むものではないと思います。ただし、ASCIIは私が覚えているものから128にはなりません。これは、0から127までの7ビット形式です。そして、127は「削除」することになっているので、実際には127を含めるかどうかはわかりません。

同様に、2番目のブロックには " > 2"があり、0、1、および2を除外します(2は2より大きくありません)。重要なのは、最初のブロックが2を除外しないことです。0と1のみです。2は明らかに「テキストの開始」であるため、すべてのASCII文字列に含まれていても驚かないでしょう。これにより、2番目の条件が常にfalseである理由が説明されます。

于 2012-04-27T08:01:53.223 に答える