2012-04-27 6 views
0

MATLAB 부울 연산자에 문제가 있습니다.matlab 부울 연산자

비 ASCII 범위 :

  • 2 - 0
  • 조건이 상기 범위 내에 문자가없는 경우에만 참으로 바뀌는 경우

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과 129에 대해 거짓이 될 것입니다. 이는 128보다 높기 때문에 원하는 것이 아니라고 가정합니다. 그러나 ASCII는 128에서 7 비트 형식 (0에서 127까지)을 기억합니다. 그리고 127은 "삭제"로되어 있기 때문에 실제로 127 개의 문제를 포함하더라도 확실하지 않습니다.

마찬가지로 두 번째 블록의 값은 0, 1 및 2 (2는 2보다 크지 않음) 인 "> 2"입니다. 중요하게도 첫 번째 블록 에서 2와 0 만 제외하지 않습니다. 2는 분명히 "텍스트 시작"이므로 모든 ASCII 문자열에이 문자열이 있으면 놀라지 않을 것입니다. 그러면 두 번째 조건이 항상 그릇된.

+0

아스키 범위에 의해 나는 실제 ascii 범위를 의미하지 않았다. 나는 그 범위에서 ascii 문자가 if 조건을 true로 만들도록하고 싶습니다. – klijo