Funcion para implementar XOR de enteros
Hola Ariel-Stafe,
Me pareció interesante el reto del XOR y creé una función que lo implementa:
FUNCTION ZXOR.
*"----------------------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(ZNUMA) TYPE INTEGER
*" REFERENCE(ZNUMB) TYPE INTEGER
*" EXPORTING
*" REFERENCE(ZNUMC) TYPE INTEGER
*"----------------------------------------------------------------------
data: z_int type integer.
data: z_potencia type integer.
data: z_numa type integer.
data: z_numb type integer.
z_int = 9.
znumc = 0.
z_numa = znuma.
z_numb = znumb.
do 10 times.
z_potencia = 2 ** z_int.
if ( z_numa ge z_potencia ) and ( z_numb ge z_potencia ).
z_numa = z_numa - z_potencia.
z_numb = z_numb - z_potencia.
elseif ( z_numa ge z_potencia ).
z_numa = z_numa - z_potencia.
znumc = znumc + z_potencia.
elseif ( z_numb ge z_potencia ).
z_numb = z_numb - z_potencia.
znumc = znumc + z_potencia.
endif.
z_int = z_int - 1.
enddo.
ENDFUNCTION.
Seguramente se puede pulir un poco, pero así opera bien hasta donde entiendo.
Como puede observar, esta hecha para números de solo 3 cifras. Si se quisiera utilizar para números mayores que 1023, habría que pasar el z_int a 10 (o a mayor valor) e igualmente el "do" sería "do 11 times", etc.
Espero que le sirva.
Abapedro
|