RPGLE的位移
回答
对于< <,除以2,4,8等。对于>>,乘以2,4,8等
从n = 1时,2得到的2,4,8等3,使用%inth(2 ** n)。
对于除法,请使用%div而不是/运算符,以避免出现小数位。
C:
n = 5;
i <<= n;
i >>= n;
RPG:
n = 5;
i *= %inth(2 ** n);
i = %div(i : %inth(2 ** n));
or
i = shift_left (i : n);
i = shift_right (i : n);
dcl-proc shift_left;
dcl-pi *n int(20);
value int(20) value;
shift int(20) value;
end-pi;
return value * %inth(2 ** shift);
end-proc;
dcl-proc shift_right;
dcl-pi *n int(20);
value int(20) value;
shift int(20) value;
end-pi;
return %div(value : %inth(2 ** shift));
end-proc;
你不能。
AND,OR,XOR,yes ... shift no。
你似乎认为你可以用另一种语言做的所有事情都应该可以在RPG中实现。这不是......没关系。关于ILE的好处是你可以很容易地创建一个C程序,如果你需要它可以在RPG中进行位移和调用。
您当然可以乘以/除以2^n ....得到相同的结果,也许编译器会将其优化为位移。但是你必须使用一个无符号的整数变量。
RPG是不是有点twiddly语言。它是为解决业务问题而创建的,并且位移通常不是解决业务问题所需的东西。但是,RPG IV是一种ILE语言,可与其他ILE语言良好地配合使用。如果你需要移位,你可以在C中创建一个执行移位的函数,并从你的RPG程序中调用它。
所以,如果你有一个C函数调用ishiftl
该转移的整数左:
int ishiftl(int i) {
return i << 1;
}
您需要创建一个RPG游戏的原型是这样的:
dcl-proc ishiftl int(10) ExtProc('ishiftl');
i Int(10) value;
end-proc;
然后,你可以这样调用:
dcl-s result Int(10);
dcl-s num Int(10);
result = ishiftl(num);
注: C是区分大小写的语言以及您定义函数名称的情况非常重要。另一方面RPG不区分大小写,并且所有标识符都隐式转换为大写。因此,ExtProc('name')需要在定义的情况下显式定义C函数的名称。另外,还有一些事情要记住。一个是C通过价值传递论据。如果你不太熟悉RPG中C函数的原型,芭芭拉莫里斯写了一张备忘单来帮助。它位于here。
当然,函数调用否定了使用位移时可能获得的任何性能优势,作为语言功能与乘法或除法。 – jmarkmurphy
也许过早优化? – jmarkmurphy
也许哈哈哈:) – LppEdd
- 1. AS400 RPGLE程序
- 2. dealloc +%alloc()vs%realloc() - RPGLE
- 3. 程序指针RPGLE(PROCPTR)
- 4. rpgle程序的Post方法webservice调用
- 5. RPGLE中的布尔运算顺序
- 6. RPGLE外部描述的数据结构
- 7. 从RPGLE(AS400)到java的多维数组
- 8. 位移位
- 9. 移位N位
- 10. 位列移位
- 11. C中的逐位移位
- 12. XML和iSeries RPGLE - 开发工具?
- 13. 从rpgle程序返回字符串
- 14. RPGLE数据结构数组查找
- 15. 如何从rpgle调用java -jar
- 16. 将记录读入RPGLE循环?
- 17. 位位移在Java
- 18. 负位数移位的位移符号运算符
- 19. 在C位移位是我的位?
- 20. 的Python位位移32位约束
- 21. 位位移功能,在HSV图像移位位
- 22. Java中的位移
- 23. 与ABAP的位移
- 24. 位移在QGraphicsScene
- 25. 位移x *数
- 26. BitArray - 移位
- 27. 位移用Java
- 28. 移位字节
- 29. 位移问题
- 30. 移位便携
你击败了我的更新:)编译器是否优化了这样一个操作来进行位移? – Charles
@Charles我一直在寻找性能的位移,但我认为这不是最佳选择。我的意思是,这是位移的更高级别的“抽象”。 – LppEdd
RPG编译器不会优化到位移。我不知道优化翻译是否会这样做。 –