2017-09-13 4 views
0

type = 7 및 seq = 224 인 경우 아래 코드가 true가되는 이유는 무엇입니까?RPGLE의 부울 연산 순서

RPGLE 자유 형식 :

if (type = 6 or     
    type = 7 or     
    type = 9) and    
    seq <> 224 and 
    seq <> 249; 

그런데 왜 :

if (type = 6 or     
    type = 7 or     
    type = 9) and    
    not (seq = 224 or seq=249); 

나는 그것을 다시했다? 나는 그것이 NOT 연산자와 관련이 있다고 추측하고있다.

+1

'type' 또는'seq'는 여러분이 생각한 것이 아니거나 실제로 실행 한 코드가 여기에 표시 한 것이 아니라고 생각합니다. 두 스 니펫은 논리적으로 동일하며 동일한 동작을 가져야합니다. –

+0

디버깅 중이었고 둘 다 확인했지만 더 이상 만들지 못했습니다. 디버그 모드 나 이와 유사한 모드에서 재 컴파일을 할 수 있다고 생각합니다. 내가 확신 할 수있는 것은 그것이 두 번째 성명서로 바꾼 후에 그것은 예상대로 달렸다는 것이다. – Peter

답변

2

음, NOT는보다 높은 우선 순위를 가지고 AND 또는 OR RPG IV Reference manual operator precedence

  1. ()
  2. 내장 함수, 사용자 정의 함수
  3. 단항 +, 단항 -, NOT
  4. 을 **
  5. *,/
  6. 바이너리 + 이진 -
  7. = <>,>,> =, <, < =
  8. OR 그러나

, 당신이 보여 표현 ...

false로 평가해야
**free 

dcl-s flag ind; 
dcl-s seq int(5) inz(224); 
dcl-s type int(5) inz(7); 

    flag = (type = 6 or 
      type = 7 or 
      type = 9) and 
      not (seq = 224 or seq=249); 

    dsply ('Flag=' + flag); 
    *INLR = *ON; 
    return; 

작업 로그를 보여줍니다

DSPLY Flag = 0