首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RPGLE中的位移位

RPGLE中的位移位
EN

Stack Overflow用户
提问于 2017-06-15 06:39:53
回答 3查看 573关注 0票数 0

I语言,如Java或C,我们必须使用位移位操作数。示例:

代码语言:javascript
复制
myValue <<= 1

我如何在RPGLE中完成同样的任务?(如有可能)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-15 13:34:52

对于<<,除以2,4,8等,对于>>,乘以2,4,8等等。

要从n= 1,2,3得到2,4,8等,请使用%inth(2 ** n)。

对于除法,请使用%div而不是/运算符,以避免获得小数位。

代码语言:javascript
复制
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;                                        
票数 3
EN

Stack Overflow用户

发布于 2017-06-15 13:32:58

你不能这么做。

和,OR,XOR,yes...shift no.

你似乎认为用另一种语言所能做的一切都应该在RPG中实现。没事的是not...and。关于ILE的伟大之处在于,您可以轻松地创建一个C过程,如果需要的话,它可以进行位转换,并从RPG调用它。

当然,您可以乘以/除以2^n....same结果,而且编译器可能会将其优化为一个移位。但是您必须使用一个无符号整数变量。

票数 1
EN

Stack Overflow用户

发布于 2017-06-15 14:43:09

RPG并不是一种有点模糊的语言。它是为解决业务问题而创建的,而位移位通常不是解决业务问题所需要的东西。然而,RPG IV是一种与其他ILE语言很好地结合的ILE语言。如果您需要转换位,您可以在C中创建一个函数来执行转换,并从您的RPG程序中调用它。

因此,如果您有一个名为ishiftl的C函数,它向左移动一个整数:

代码语言:javascript
复制
int ishiftl(int i) {
    return i << 1;
}

您需要创建这样的RPG原型:

代码语言:javascript
复制
dcl-proc ishiftl int(10) ExtProc('ishiftl');
  i       Int(10) value;
end-proc;

然后你可以这样称呼它:

代码语言:javascript
复制
dcl-s result       Int(10);
dcl-s num          Int(10);

result = ishiftl(num);

注意:C是一种区分大小写的语言,定义函数名的情况非常重要。另一方面,RPG不区分大小写,所有标识符都被隐式转换为大写。因此,在定义C函数的情况下,需要ExtProc(' name ')显式定义C函数的名称。此外,还有一些事情需要记住。一个是C按值传递参数。如果您不太熟悉如何在RPG中实现C函数的原型,芭芭拉·莫里斯( Barbara )就写了一份小抄来帮助你。它位于这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44560356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档