Category:Amazing Hopper: Difference between revisions
m
→MANEJO DE BITS Y CAMBIO DE BASE
m (→CONJUNTOS) |
|||
Line 2,809:
La instrucción BIT es una función tipo NAVAJA SUIZA, que encierra numerosas herramientas para el manejo de bits.
-----------------------------------------------------------------------------------
{N}bit(CODIGO) Ejecuta una serie de cálculos de bits sobre N números enteros
de 16 bits (ver lista de códigos).
Si CODIGO es menor que 100, hace referencia a la posición del
bit.
Ejemplo (con macro FOR/NEXT):
num=4003
for(i=32, {i}is greater than (0),--i)
{num},bit(i), print
next
==> 00000000000000000000111110100011
{N}hex Convierte un número decimal a una cadena hexadecimal.
{200}hex ==> C8
{N}bin Convierte un número decimal a una cadena binaria.
{200}bin ==> 11001000
setbin(n) Establece un número "n" de dígitos binarios para la salida
de BIN.
setbin(15)
{200}bin ==> 000000011001000
{N}oct Convierte un número decimal a una cadena octal.
{200}oct ==> 310
Los códigos están definidos en HOPPER.H.
Line 2,844 ⟶ 2,843:
BITAND AND binario. Ejemplo:
{0xfffh,0x99h},bit(BITAND) ==> 153 (99h)
BITOR OR binario. Ejemplo:
{0xfffh,0x99h},bit(BITOR) ==> 4095 (FFFh)
BITXOR XOR (OR exclusivo) binario.
Ejemplo:
{0xfffh,0x80h},bit(BITXOR) ==> 3967 (F7Fh)
BITNOT NOT binario. Ejemplo:
{0xfffh},bit(BITNOT) ==> 4294963200 (FFFFF000h)
BITCLR Deja el bit indicado en 0 (lo apaga). El valor del TOP
es el entero a procesar; el resto, son las posiciones
Line 2,861 ⟶ 2,860:
num=0xfffh
{7,5,4,3,num},bit(BITCLR) ==> 4003 (111110100011)
BITSET Enciende el bit indicado. El valor del TOP es el entero
a procesar; el resto, son las posiciones de bits,
Line 2,868 ⟶ 2,867:
num=4003
{7,5,4,3,num},bit(BITSET) ==> 4095 (111111111111)
MIRRBYTE Invierte los bits de un entero. LOWBYTE y HIGHBYTE definen
los bits a reflejar (si solo el byte más bajo, o todo).
Line 2,875 ⟶ 2,874:
{LOWBYTE,num},bit(MIRRBYTE) ==> 0000100010001111 = 2191
{HIGHBYTE,num},bit(MIRRBYTE) ==> 1000111100010000 = 36624
BITROT Rota bits hacia la izquierda. El bit de más hacia la
izquierda (del byte más bajo o del más alto), pasa a ser
Line 2,881 ⟶ 2,880:
BITROT distingue LOWBYTE y HIGHBYTE.
Ejemplo 1 (LOWBYTE):
num = 2289 // (0000100011110001)
i=1
Line 2,887 ⟶ 2,886:
{LOWBYTE,i,num},bit(BITROT),bin,P_NL,print
++i,{5,i} jle(loop lowbyte)
Salida:
Line 2,895 ⟶ 2,894:
0000100000011111
0000100000111110
Ejemplo 2 (HIGHBYTE):
num = 2289 // (0000100011110001)
i=1
Line 2,903 ⟶ 2,902:
{HIGHBYTE,i,num},bit(BITROT),bin,P_NL,print
++i,{5,i} jle(loop highbyte)
Salida:
Line 2,921 ⟶ 2,920:
{5,num},bit(SHIFTR) ==> 0000001100100010 = 802
{5,num},bit(SHIFTL) ==> 1000100011000000 = 821440
HEXTODEC
OCTTODEC
Line 2,936 ⟶ 2,935:
HEXTODEC:1011754
OCTTODEC:15483
LOWBYTE Macro que señala el byte más bajo, usado en BITROT y MIRRBYTE.
HIGHBYTE Macro que señala el byte más alto, usado en BITROT y MIRRBYTE.
== ATRAPAMIENTO DE ERRORES ==
|