Ibm midrange RPGLE中的布尔运算顺序
如果type=7和seq=224,为什么下面的代码会导致true 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
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;