Ibm midrange RPGLE中的布尔运算顺序

Ibm midrange RPGLE中的布尔运算顺序,ibm-midrange,rpgle,Ibm Midrange,Rpgle,如果type=7和seq=224,为什么下面的代码会导致true RPGLE自由形式: if (type = 6 or type = 7 or type = 9) and not (seq = 224 or seq=249); 我不得不将其改写为: if (type = 6 or type = 7 or

如果type=7和seq=224,为什么下面的代码会导致true

RPGLE自由形式:

if (type = 6 or                 
    type = 7 or                 
    type = 9) and               
    not (seq = 224 or seq=249);
我不得不将其改写为:

if (type = 6 or                 
    type = 7 or                 
    type = 9) and               
    seq <> 224 and 
    seq <> 249;
if(类型=6或
类型=7或
类型=9)和
序号224和
序号249;

但是为什么呢?我猜这与NOT运算符有关。

嗯,
NOT
的优先级高于

  • ()
  • 内置函数、用户定义函数
  • 一元+,一元-,非
  • **
  • *,/
  • 二进制+,二进制-

  • =,>,>=,嗯,
    NOT
    的优先级高于
    
    

  • ()
  • 内置函数、用户定义函数
  • 一元+,一元-,非
  • **
  • *,/
  • 二进制+,二进制-

  • =,>,>=,我倾向于认为
    type
    seq
    不是您所认为的,或者您实际运行的代码不是您在此处显示的代码。这两个代码段在逻辑上是等价的,应该产生相同的行为。我调试了它并检查了它们,但是我无法再重新创建它。我相信这可能是由于我在调试模式下重新编译或类似的原因。我所能确定的是,在我将其更改为第二条语句后,它按预期运行。我倾向于认为
    type
    seq
    不是您所认为的,或者您实际运行的代码不是您在此处显示的代码。这两个代码段在逻辑上是等价的,应该产生相同的行为。我调试了它并检查了它们,但是我无法再重新创建它。我相信这可能是由于我在调试模式下重新编译或类似的原因。我所能确定的是,在我将其更改为第二个语句后,它按预期运行。
    **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;