且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

ABAP整型类型的几种位操作 - OR, AND, XOR

更新时间:2022-09-05 23:21:56

For training purpose I need to explain to my ABAP team colleagues about how bitwise operation on Integer in Java like below is done.ABAP整型类型的几种位操作 - OR, AND, XORAnd since the bitwise operation in ABAP can only support data type X and XSTRING,ABAP整型类型的几种位操作 - OR, AND, XORso now I create a prototype which can support bitwise operation OR, AND, XOR on int4 in ABAP for teaching purpose.


Still remember the wrapper class Integer in Java which is explained in my blog Integer in ABAP, Java and JavaScript?


I just create a wrapper class ZCL_INTEGER in ABAP by following the design idea used in Java.


Usage of ZCL_INTEGER

Here below the usage of this wrapper class is explained.


Get instance of ZCL_INTEGER

In Java you use the following code to get an instance of wrapper class Integer:


ABAP整型类型的几种位操作 - OR, AND, XORdata(int1) = zcl_integer=>value_of( 3 ).

data(inta) = zcl_integer=>value_of( 3 ).

data(int2) = zcl_integer=>value_of( 2 ).

ASSERT int1 = inta.The same primitive int value will always lead to exactly the same instance of ZCL_INTEGER. I achieve this by using an internal table MT_CACHE in ZCL_INTEGER as a cache.


Get integer’s binary representation

A string for the integer’s binary format is returned by simply calling method get_binary_format.


zcl_integer=>value_of( 3 ).

data(int2) = zcl_integer=>value_of( 2 ).

WRITE:/ int1->get_binary_format( ).

WRITE:/ int2->get_binary_format( ).


Result:ABAP整型类型的几种位操作 - OR, AND, XOR

Bitwise operation

Use instance method OR, AND and XOR accordingly.

Test code:data(int1) = zcl_integer=>value_of( 3 ).

data(int2) = zcl_integer=>value_of( 2 ).

data(int3) = zcl_integer=>value_of( 12 ).

data(int4) = zcl_integer=>value_of( 4 ).

data(int5) = zcl_integer=>value_of( 24 ).

data(int6) = zcl_integer=>value_of( 4 ).

WRITE:/ int1->or( int2 )->get_raw_value( ).

WRITE:/ int3->and( int4 )->get_raw_value( ).

WRITE:/ int5->xor( int6 )->get_raw_value( ).Same output as Java:ABAP整型类型的几种位操作 - OR, AND, XORNow let’s try to do more interesting task: swap the two integer without using intermediate variable

ABAP整型类型的几种位操作 - OR, AND, XOR

DATA(a) = zcl_integer=>value_of( 20 ).

DATA(b) = zcl_integer=>value_of( 30 ).

a = a->xor( b ).

b = a->xor( b ).

a = a->xor( b ).

WRITE:/ a->get_raw_value( ).

WRITE:/ b->get_raw_value( ).Test output, swap is doneABAP整型类型的几种位操作 - OR, AND, XORABAP整型类型的几种位操作 - OR, AND, XORCurrently this toy only supports unsigned integer.

Please manually create these three simple DDIC objects before you activate the code:

ABAP整型类型的几种位操作 - OR, AND, XOR

ZBIT domainABAP整型类型的几种位操作 - OR, AND, XORData element for BIT type

ABAP整型类型的几种位操作 - OR, AND, XORAnd table type:

ABAP整型类型的几种位操作 - OR, AND, XORFurther reading

I have written a series of blogs which compare the language feature among ABAP, JavaScript and Java. You can find a list of them below:


Lazy Loading, Singleton and Bridge design pattern in JavaScript and in ABAP

Functional programming – Simulate Curry in ABAP

Functional Programming – Try Reduce in JavaScript and in ABAP

Simulate Mockito in ABAP

A simulation of Java Spring dependency injection annotation @Inject in ABAP

Singleton bypass – ABAP and Java

Weak reference in ABAP and Java

Fibonacci Sequence in ES5, ES6 and ABAP

Java byte code and ABAP Load

How to write a correct program rejected by compiler: Exception handling in Java and in ABAP

An small example to learn Garbage collection in Java and in ABAP

String Template in ABAP, ES6, Angular and React

Try to access static private attribute via ABAP RTTI and Java Reflection

Local class in ABAP, Java and JavaScript

Integer in ABAP, Java and JavaScript

Covariance in Java and simulation in ABAP

Various Proxy Design Pattern implementation variants in Java and ABAP

Tag(Marker) Interface in ABAP and Java

Bitwise operation ( OR, AND, XOR ) on ABAP Integer

An interview question: Compare two integers without +,-,*,/ or > and <