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編譯器不會優化到位移。我不知道優化翻譯是否會這樣做。 –