Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
265
Task/Bitwise-operations/ABAP/bitwise-operations.abap
Normal file
265
Task/Bitwise-operations/ABAP/bitwise-operations.abap
Normal file
|
|
@ -0,0 +1,265 @@
|
|||
report z_bitwise_operations.
|
||||
|
||||
class hex_converter definition.
|
||||
public section.
|
||||
class-methods:
|
||||
to_binary
|
||||
importing
|
||||
hex_value type x
|
||||
returning
|
||||
value(binary_value) type string,
|
||||
|
||||
to_decimal
|
||||
importing
|
||||
hex_value type x
|
||||
returning
|
||||
value(decimal_value) type int4.
|
||||
endclass.
|
||||
|
||||
|
||||
class hex_converter implementation.
|
||||
method to_binary.
|
||||
data(number_of_bits) = xstrlen( hex_value ) * 8.
|
||||
|
||||
do number_of_bits times.
|
||||
get bit sy-index of hex_value into data(bit).
|
||||
|
||||
binary_value = |{ binary_value }{ bit }|.
|
||||
enddo.
|
||||
endmethod.
|
||||
|
||||
|
||||
method to_decimal.
|
||||
decimal_value = hex_value.
|
||||
endmethod.
|
||||
endclass.
|
||||
|
||||
|
||||
class missing_bitwise_operations definition.
|
||||
public section.
|
||||
class-methods:
|
||||
arithmetic_shift_left
|
||||
importing
|
||||
old_value type x
|
||||
change_with type x
|
||||
exporting
|
||||
new_value type x,
|
||||
|
||||
arithmetic_shift_right
|
||||
importing
|
||||
old_value type x
|
||||
change_with type x
|
||||
exporting
|
||||
new_value type x,
|
||||
|
||||
logical_shift_left
|
||||
importing
|
||||
old_value type x
|
||||
change_with type x
|
||||
exporting
|
||||
new_value type x,
|
||||
|
||||
logical_shift_right
|
||||
importing
|
||||
old_value type x
|
||||
change_with type x
|
||||
exporting
|
||||
new_value type x,
|
||||
|
||||
rotate_left
|
||||
importing
|
||||
old_value type x
|
||||
change_with type x
|
||||
exporting
|
||||
new_value type x,
|
||||
|
||||
rotate_right
|
||||
importing
|
||||
old_value type x
|
||||
change_with type x
|
||||
exporting
|
||||
new_value type x.
|
||||
endclass.
|
||||
|
||||
|
||||
class missing_bitwise_operations implementation.
|
||||
method arithmetic_shift_left.
|
||||
clear new_value.
|
||||
|
||||
new_value = old_value * 2 ** change_with.
|
||||
endmethod.
|
||||
|
||||
|
||||
method arithmetic_shift_right.
|
||||
clear new_value.
|
||||
|
||||
new_value = old_value div 2 ** change_with.
|
||||
endmethod.
|
||||
|
||||
|
||||
method logical_shift_left.
|
||||
clear new_value.
|
||||
|
||||
data(bits) = hex_converter=>to_binary( old_value ).
|
||||
|
||||
data(length_of_bit_sequence) = strlen( bits ).
|
||||
|
||||
bits = shift_left(
|
||||
val = bits
|
||||
places = change_with ).
|
||||
|
||||
while strlen( bits ) < length_of_bit_sequence.
|
||||
bits = |{ bits }0|.
|
||||
endwhile.
|
||||
|
||||
do strlen( bits ) times.
|
||||
data(index) = sy-index - 1.
|
||||
|
||||
data(current_bit) = bits+index(1).
|
||||
|
||||
if current_bit eq `1`.
|
||||
set bit sy-index of new_value.
|
||||
endif.
|
||||
enddo.
|
||||
endmethod.
|
||||
|
||||
|
||||
method logical_shift_right.
|
||||
clear new_value.
|
||||
|
||||
data(bits) = hex_converter=>to_binary( old_value ).
|
||||
|
||||
data(length_of_bit_sequence) = strlen( bits ).
|
||||
|
||||
bits = shift_right(
|
||||
val = bits
|
||||
places = change_with ).
|
||||
|
||||
while strlen( bits ) < length_of_bit_sequence.
|
||||
bits = |0{ bits }|.
|
||||
endwhile.
|
||||
|
||||
do strlen( bits ) times.
|
||||
data(index) = sy-index - 1.
|
||||
|
||||
data(current_bit) = bits+index(1).
|
||||
|
||||
if current_bit eq `1`.
|
||||
set bit sy-index of new_value.
|
||||
endif.
|
||||
enddo.
|
||||
endmethod.
|
||||
|
||||
|
||||
method rotate_left.
|
||||
clear new_value.
|
||||
|
||||
data(bits) = hex_converter=>to_binary( old_value ).
|
||||
|
||||
bits = shift_left(
|
||||
val = bits
|
||||
circular = change_with ).
|
||||
|
||||
do strlen( bits ) times.
|
||||
data(index) = sy-index - 1.
|
||||
|
||||
data(current_bit) = bits+index(1).
|
||||
|
||||
if current_bit eq `1`.
|
||||
set bit sy-index of new_value.
|
||||
endif.
|
||||
enddo.
|
||||
endmethod.
|
||||
|
||||
|
||||
method rotate_right.
|
||||
clear new_value.
|
||||
|
||||
data(bits) = hex_converter=>to_binary( old_value ).
|
||||
|
||||
bits = shift_right(
|
||||
val = bits
|
||||
circular = change_with ).
|
||||
|
||||
do strlen( bits ) times.
|
||||
data(index) = sy-index - 1.
|
||||
|
||||
data(current_bit) = bits+index(1).
|
||||
|
||||
if current_bit eq `1`.
|
||||
set bit sy-index of new_value.
|
||||
endif.
|
||||
enddo.
|
||||
endmethod.
|
||||
endclass.
|
||||
|
||||
|
||||
start-of-selection.
|
||||
data:
|
||||
a type x length 4 value 255,
|
||||
b type x length 4 value 2,
|
||||
result type x length 4.
|
||||
|
||||
write: |a -> { a }, { hex_converter=>to_binary( a ) }, { hex_converter=>to_decimal( a ) }|, /.
|
||||
|
||||
write: |b -> { b }, { hex_converter=>to_binary( b ) }, { hex_converter=>to_decimal( b ) }|, /.
|
||||
|
||||
result = a bit-and b.
|
||||
write: |a & b -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
|
||||
result = a bit-or b.
|
||||
write: |a \| b -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
|
||||
result = a bit-xor b.
|
||||
write: |a ^ b -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
|
||||
result = bit-not a.
|
||||
write: |~a -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
|
||||
missing_bitwise_operations=>arithmetic_shift_left(
|
||||
exporting
|
||||
old_value = bit-not a
|
||||
change_with = b
|
||||
importing
|
||||
new_value = result ).
|
||||
write: |~a << b -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
|
||||
missing_bitwise_operations=>arithmetic_shift_right(
|
||||
exporting
|
||||
old_value = bit-not a
|
||||
change_with = b
|
||||
importing
|
||||
new_value = result ).
|
||||
write: |~a >> b -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
|
||||
missing_bitwise_operations=>logical_shift_left(
|
||||
exporting
|
||||
old_value = a
|
||||
change_with = b
|
||||
importing
|
||||
new_value = result ).
|
||||
write: |a <<< b -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
|
||||
missing_bitwise_operations=>logical_shift_right(
|
||||
exporting
|
||||
old_value = bit-not a
|
||||
change_with = b
|
||||
importing
|
||||
new_value = result ).
|
||||
write: |~a >>> b -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
|
||||
missing_bitwise_operations=>rotate_left(
|
||||
exporting
|
||||
old_value = bit-not a
|
||||
change_with = b
|
||||
importing
|
||||
new_value = result ).
|
||||
write: |~a rotl b -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
|
||||
missing_bitwise_operations=>rotate_right(
|
||||
exporting
|
||||
old_value = a
|
||||
change_with = b
|
||||
importing
|
||||
new_value = result ).
|
||||
write: |a rotr b -> { result }, { hex_converter=>to_binary( result ) }, { hex_converter=>to_decimal( result ) }|, /.
|
||||
Loading…
Add table
Add a link
Reference in a new issue