资讯专栏INFORMATION COLUMN

面试问题 - 只用位操作在ABAP里实现a+b

Lorry_Lu / 777人阅读

摘要:用实现下图的第五种整数相加算法实现代码算法描述参考我的博客

用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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/93120.html

相关文章

  • 面试问题 - 只用操作ABAP实现a+b

    摘要:用实现下图的第五种整数相加算法实现代码算法描述参考我的博客 用ABAP实现下图的第五种整数相加算法:showImg(https://segmentfault.com/img/remote/1460000013503348); 实现代码: REPORT zint. PARAMETERS: a TYPE int4 OBLIGATORY DEFAULT 100, b...

    objc94 评论0 收藏0
  • 我用ABAP做过的那些无聊的事情

    摘要:而且这种现象在德国的法定节假日里更加突出。所以本文提到的这些东西都是在德国节假日里无聊的产物,对于顾问的实际工作可能帮助不大。这也是在这篇文章里介绍的众多用搞出来的无聊的东西里唯一被官方认可的工具,囧。直接用执行里的事务码或者函数。 国庆大假马上就要来临了,我们聊点轻松的话题,关于假期。 Jerry的成都同事李贝宁(Li Ben), 《SAP成都研究院李三郎:SCP Applicati...

    wuaiqiu 评论0 收藏0
  • ABAP开发知识点整理

    摘要:前提是类型可以转换成类型的字段,否则会发生或者的错误。程序有激活时自动执行的特点。读取数据库表所有字段时使用。这种表在语言里称为内表。语句用于删除重复值。 ABA...

    LancerComet 评论0 收藏0
  • 金庸的武侠世界和SAP的江湖

    摘要:年月日晚,成都地铁一号线,手机上突然弹出来一条金庸去世的新闻。作为一个开发人员,我在金庸这十四部名著里看到的,是的江湖。金庸的这个武功设定,和公司的数字化转型,向的转型很像。 2018年10月30日晚,成都地铁一号线,Jerry手机app上突然弹出来一条金庸去世的新闻。 Jerry识字很早,小学一年级就开始蹭我父亲的《射雕英雄传》看了。小时候,我爸工作的车间里有一位领导,退休后把自己家...

    Blackjun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<