面试问题 - 只用位操作在ABAP里实现a+b
时间:2022-05-02
本文章向大家介绍面试问题 - 只用位操作在ABAP里实现a+b,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
用ABAP实现下图的第五种整数相加算法:
实现代码:
REPORT zint.
PARAMETERS: a TYPE int4 OBLIGATORY DEFAULT 100,
b TYPE int4 OBLIGATORY DEFAULT 100.
DATA: threshold TYPE int4.
FORM add USING a TYPE int4 b TYPE int4 CHANGING cv_result TYPE int4.
DATA: n TYPE int4 VALUE 0,
c TYPE int4 VALUE 0.
DATA: i TYPE int4 VALUE 1.
DATA: boolean_a TYPE abap_bool,
boolean_b TYPE abap_bool,
_a TYPE int4,
_b TYPE int4,
aa TYPE int4,
bb TYPE int4.
DATA(wrapper_one) = zcl_integer=>value_of( 1 ).
DATA(wrapper_c) = zcl_integer=>value_of( c ).
aa = a.
bb = b.
WHILE i < threshold.
DATA(wrapper_a) = zcl_integer=>value_of( aa ).
DATA(wrapper_b) = zcl_integer=>value_of( bb ).
boolean_a = boolc( wrapper_a->and( wrapper_one )->get_raw_value( ) EQ 1 ).
boolean_b = boolc( wrapper_b->and( wrapper_one )->get_raw_value( ) EQ 1 ).
_a = COND int4( WHEN boolean_a EQ abap_true THEN 1 ELSE 0 ).
_b = COND int4( WHEN boolean_b EQ abap_true THEN 1 ELSE 0 ).
wrapper_a = zcl_integer=>value_of( _a ).
wrapper_b = zcl_integer=>value_of( _b ).
wrapper_c = zcl_integer=>value_of( c ).
DATA(_n_wrapper) = wrapper_a->xor( wrapper_b )->xor( wrapper_c ).
DATA(b_or_c) = wrapper_b->or( wrapper_c ).
DATA(b_and_c) = wrapper_b->and( wrapper_c ).
DATA(_c_wrapper) = wrapper_a->and( b_or_c )->or( b_and_c ).
c = _c_wrapper->get_raw_value( ).
DATA(_n_i0_wrapper) = zcl_integer=>value_of( COND int4( WHEN _n_wrapper->get_raw_value( ) > 0 THEN i ELSE 0 ) ).
DATA(wrapper_n) = zcl_integer=>value_of( n ).
n = wrapper_n->or( _n_i0_wrapper )->get_raw_value( ).
wrapper_a = zcl_integer=>value_of( aa ).
aa = wrapper_a->shift_right( )->get_raw_value( ).
wrapper_b = zcl_integer=>value_of( bb ).
bb = wrapper_b->shift_right( )->get_raw_value( ).
cv_result = n.
DATA(wrapper_i) = zcl_integer=>value_of( i ).
wrapper_i->shift_left( ).
i = wrapper_i->get_raw_value( ).
ENDWHILE.
ENDFORM.
START-OF-SELECTION.
DATA: i TYPE int4.
threshold = ipow( base = 2 exp = 30 ).
PERFORM add USING a b CHANGING i.
WRITE: / i.
算法描述参考我的SCN博客 Just for fun – Implement a + b using pure bitwise operation in ABAP
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 6.0开发实现关机菜单添加重启按钮的方法
- 基于Socket.IO实现Android聊天功能代码示例
- Android 滑动监听的实例详解
- Android中使用ListView模拟微信好友功能
- Android实现压缩字符串的方法示例
- Android使用OkHttp请求自签名的https网站的示例
- Android Notification 使用方法详解
- Android空心圆及层叠效果实现代码
- 如何更改Dialog的标题与按钮颜色详解
- Android编程之数据库的创建方法详解
- android studio集成ijkplayer的示例代码
- Android开发实现浏览器全屏显示功能
- Android动态人脸检测的示例代码(脸数可调)
- Android抽奖轮盘的制作方法
- Android 获取屏幕的多种宽高信息的示例代码