面試問題 - 只用位操作在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的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2151465/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ABAP常見面試問題面試
- (轉)ABAP 面試問題及答案面試
- 在ABAP裡實現條件斷點的三種方式斷點
- 使用純粹的ABAP位操作實現兩個整數相加
- ABAP面試題目面試題
- A+B 演算法問題演算法
- 在JBoss裡部署testWeb出現了問題Web
- ABAP面試問題 - 不使用加減乘除等操作比較兩個整數大小面試
- Python入門:A+B問題Python
- SAP ABAP OData 服務的 $count 操作實現
- ABAP面試題及其解答(轉)面試題
- SQL崗位30個面試題,SQL面試問題及答案SQL面試題
- ABAP面試題系列:寫一組會出現死鎖(Deadlock)的ABAP程式面試題
- 不用ChatGPT,只用CodeGeeX with Chat!一樣實現智慧問答ChatGPT
- java實現pv操作 -------哲學家問題Java
- 面試常見問題之實現bind函式面試函式
- 面試有關字串中字元出現重複字元的面試問題,這裡都有了面試字串字元
- ABAP 裡檔案操作涉及到中文字符集的問題和解決方案試讀版
- 面試官常問的位運算問題總結面試
- 面試官問:能否模擬實現JS的new操作符面試JS
- 史上最全的大廠Mysql面試題在這裡!MySql面試題
- 轉:在ABAP中實現進度條的例子
- DDD專案現在實施的問題
- ABAP字串操作 擷取字元長度 取位數字串字元
- [分享會]只用CSS實現輪播圖CSS
- 面試挖坑題:之C語言底層操作問題面試C語言
- 所有的PHP面試題,職場問題都整理在這裡了,來年(2021年)面試的時候有用PHP面試題
- 操作oracle出現的問題Oracle
- 通過階乘的例子,練習在JavaScript, Scala和ABAP裡實現尾遞迴(Tail Recursion)JavaScript遞迴AI
- PB中位操作的實現程式碼
- PAT答案(D進位制的A+B)
- 淺談 SAP ABAP 系統裡的 ALV 輸出方式實現
- ABAP字串操作字串
- 使用ABAP程式設計實現對微軟Office Word文件的操作程式設計微軟
- SAP ABAP CDS view裡的註解在ABAP後臺是如何被解析的?View
- ABAP 面試問題及答案(一):資料庫更新及更改 SAP Standard (轉)面試資料庫
- 只用lambda演算實現FizzBuzz遊戲(Python版)遊戲Python
- SAP ABAP, Fiori, Android和Hybris裡的非同步操作Android非同步