2012-04-27 18 views
0

MATLAB論理演算子に問題があります。matlabブール演算子

非ASCII範囲:

  • 0から2
  • 条件が上記の範囲には文字がない場合にのみ、trueになっザ・場合

128以上。 - 条件は、すべての時間偽のようです

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 

期待どおりに動作しません:私は、次の手順を実行したときに

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 

問題が発生します。どうして?

+0

テストに使用できるコードをいくつか用意できますか? – Superbest

答えて

0

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

次に、「128以上」と言うが、「< 128」にチェックを入れてください。これは128以上ではなく、127以上であることを意味します。128以上ではfalse、129以上であることを意味します。しかし、ASCIIは、私が想起しているところからは128にはなりません。これは0から127までの7ビット形式です。 127は「削除」となっているので、実際には127件も含めてもわかりません。

同様に、2番目のブロックの値は「> 2」で、0,1,2(2は2より大きくはありません)を除きます。重要なのは、最初のブロックでは2と0だけが除外されていません。2は明らかに「テキストの開始」です。なぜなら、すべてのASCII文字列にそれがあると驚くことはありません。偽です。

+0

私は実際のアスキー範囲を意味しませんでした。私は、これらの範囲内のascii文字がif条件を真とすることを許可したいだけです。 – klijo