Hexadecimal

Anuncio
C LA S E D E H EX A D EC IM A L
Ø
ØB
Byy uuL
LZZaaN
Naa
INTRODUCCION
La base fundamental de la información digital, es el bit. Un bit no puede almacenar
mucha información por si solo; dispone de un corto menú: activado(on),
desactivado(off), 1 o 0, alto o bajo. Pero en el chip correcto en el momento preciso, un
solo bit puede activar instrucciones que cambian o mueven muchos otros bits, y cuando
se empiezan a mover a la vez millones de ellos a una velocidad increíblemente rápida,
se pueden hacer cosillas.
A algunas personas, les encanta cambiar el estado de las cosas, pero un bit solo puede
estar en un estado o en otro. La numeración binaria tiene mucho sentido en un
ordenador digital, un sistema formado de cientos de miles de conmutadores
interconectados que están activados o desactivados. Pero los bits son mas útiles cuando
están organizados en grupos de 8 llamados bytes. Un byte es una forma de almacenar 8
piezas relacionadas de información, y resulta útil para representar un numero, una letra
o un carácter
Normalmente tu sistema informático, está preparado para mover información en
bloques de uno, dos, o cuatro bytes, dependiendo si utilizas un ordenador de 8, 16, 0 32
bits, en lugar de hacerlo con grandes números de bits diferentes.
Trabajar con números binarios o hexadecimales, no es esencialmente mas difícil que
trabajar con decimales; lo que ocurre es que tenemos mucha mas practica en cálculos
decimales. Pero juega un rato con los números binarios y hexadecimales y aprenderás
enseguida.
Es probable que utilicemos el sistema decimal, (base 10), porque los seres humanos
tenemos diez dedos en las manos y diez en los pies. Por ejemplo contemos los dedos de
los pies. En decimal es fácil. Pero empecemos por el cero para hacerlo un poco menos
aburrido.
0
1
2
3
4
5
6
7
8
9
Diez dedos de los pies, diez dígitos. En este momento uno ya se ha quedado sin dedos
para seguir contando, Un dedo mas a contar y tendríamos que pasar a dígitos dobles. El
sistema decimal tiene diez dígitos con los que jugar. Cuando se acaban, hay que
empezar a utilizar mas de un dígito.
Contar en binario es igual de fácil que en decimal, solo que tenemos nada mas que dos
números con los que jugar el 0 y el 1.
0
1
10
11
100
101
110
111
1000
1001
A veces la gente rellena los números binarios con ceros, por lo que el proceso de contar
los diez dedos en binario, podría quedar así:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
¿ Como se traduce un numero decimal a formato binario ¿. La clave es sentirse cómodo
con las potencias de 2. Recuerda que 2^0 es igual a 1.
2^15=32768
2^14=16384
2^13=8192
2^12=4096
2^11=2048
2^10=1024
2^9=512
2^8=256
2^7=128
2^6=64
2^5=32
2^4=16
2^3=8
2^2=4
2^1=2
2^0=1
Para convertir un numero binario dado a decimal, operaríamos de la siguiente forma:
Sea el numero binario :
1001 1001 1101
Solo vamos a tener en cuenta los 1 que aparecen en el numero binario, despreciando los
ceros a la hora de efectuar las distintas operaciones.
Nos fijamos en la posición que ocupa, el primer 1de la izquierda , (los ceros a la
izquierda no son significativos). En el ejemplo el primer uno está en la posición 12
contando de derecha a izquierda.
Empezamos a convertir el numero multiplicando dicho 1, por 2 elevado a la posición en
la que se encuentra –1. En el caso que nos ocupa como está en la posición 12, lo
multiplicamos por 2^11, y nos quedaría:
1x2^11=1x2048=2048
Despreciamos los dos ceros que vienen a continuación, y operamos con el siguiente 1
que aparece igual que en el caso anterior. Este nuevo 1 está en la posición 9 contando de
izquierda a derecha, por tanto nos quedaría:
2048 que teníamos anteriormente mas:
1x2^8= 2048 + 256 = 2304
y operando de igual forma nos quedaría:
2304 que teníamos anteriormente mas:
1x2^7 + 1x2^4 + 1x2^3 + 1x2^2 + 1x2^0 =
2304 + 128 + 16 +
8
+ 4
+ 1 = 2461
A la hora de convertir números decimales a binarios, realizaríamos la operación inversa,
para ello es muy interesante que presentemos la tabla anterior de las potencias de dos,
pero esta vez con el resultado en binario:
2^15=1000
2^14=0100
2^13=0010
2^12=0001
2^11=0000
2^10=0000
2^9 =0000
2^8 =0000
2^7 =0000
2^6 =0000
2^5 =0000
2^4 =0000
2^3 =0000
2^2 =0000
2^1 =0000
2^0 =0000
0000
0000
0000
0000
1000
0100
0010
0001
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
1000
0100
0010
0001
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
1000
0100
0010
0001
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
32768
16384
8192
4096
2048
1024
512
256
128
64
32
16
8
4
2
1
Ahora tomemos el numero decimal que queramos traducir, por ejemplo el 13
La cuestión es ver cual de las potencias de 2 forman este numero. Consulta la tabla y
mira cual es el mayor numero que es igual o mas pequeño, que el que se ha tomado para
traducir(13). Evidentemente el numero buscado es el 8. Al 8 decimal le corresponde el
1000 binario, es decir estamos hablando de un numero binario de 4 dígitos y el primero
mas a la izquierda es un 1, o sea que nos quedaría:
1_ _ _
Ahora de el numero buscado 13, le restamos el 8 y nos queda 5. Miramos de nuevo la
tabla y vemos que el siguiente numero debajo del 8 es 4. Como se puede restar 4 de 5
sin obtener un numero negativo, ponemos otro 1 en la siguiente posición a la derecha y
restamos 4 de 5 quedando un resto de 1.
11_ _
Consultamos de nuevo la tabla. El siguiente numero mas bajo después de 4 es 2. Sin
embargo no se puede restar el 2 del 1, porque se obtendría un numero negativo. Por
tanto ponemos un cero en la siguiente posición a la derecha.
110_
El ultimo numero de la tabla es el 1. Se puede restar 1 del resto que teníamos, 1, sin
obtener todavía ningún numero negativo, así que ponemos un 1 final en la posición de
la derecha.
1101
El numero 13 es igual por tanto al 1 1 0 1 binario, comprobamos:
1 x 2^3 + 1x2^2 +1x2^0 =
8
+ 4 + 1 = 13
LOGICA DEL PROCESADOR
Trabajar con los unos y ceros binarios es laborioso. Pero estos son muy útiles cuando
hay que realizar operaciones lógicas.
¿ Por que el valor ASCII de la A es 65 y el de la a 97 ¿. Fíjate en las representaciones de
las tres primeras letras del alfabeto
A 65 0100 0001
a 97 0110 0001
6º bit =32
B
b
66 0100 0010
98 0110 0010
6º bit =32
C
c
67 0100 0011
99 0110 0011
6º bit =32
La versión en minúsculas de cada una de las letras es idéntica a la versión en mayúscula
excepto que en todos los casos el sexto dígito binario hacia la derecha es un 1 en la
versión minúscula y un 0 en la mayúscula.
La forma mas fácil de averiguar el valor decimal de un bit binario es contar desde la
derecha a la izquierda, “1,2,4,8,16,32,64,128,256,512,1024,2048,4096......etc.”, Si lo
haces cuando llegues al 6º dígito habrás contado 32. También podrías recordar que el 6º
bit equivale a 2^5=32.
Si retas 65, (el valor de A mayúscula) de 97, (el valor de a minúscula), obtendrás 32. De
esta forma puedes calcular al instante el valor de cualquier letra mayúscula, restando el
32 decimal del valor de la letra minúscula. Y naturalmente, puedes sumar 32 al valor
ASCII de la letra mayúscula, para obtener el código ASCII de la letra minúscula.
Ahora bien esta técnica que se puede utilizar letra a letra, en ningún caso podría
utilizarse, para convertir ficheros de texto enteros, ya que si restamos 32 de todos los
caracteres de un fichero de texto, convertiremos a mayúsculas, solo los caracteres
correspondientes a letras minúsculas, pero nos saldrían cosas raras, si se tratara de restar
32 de letras mayúsculas, números u otro tipo de carácter distinto a las letras
minúsculas.. Sin embargo el ordenador puede realizar esta tarea al instante utilizando
operaciones lógicas. En este caso habría que utilizar la operación lógica AND, para
convertir las letras en mayúsculas y la operación OR, para convertirlas en minúsculas.
Las operaciones lógicas mas útiles son AND, OR, NOT y XOR. Estas son bastante
intuitivas, pero al igual que los números binarios cuesta un poco acostumbrase a ellas.
Piensa en ellas como si fuesen contratos legales.Si un contrato dice que tu recibirás
dinero si:
Escribes un articulo Y (AND) lo publicas en la web
Obviamente solo cobraras si haces las dos cosas, pero no si solo haces una de ellas.
Pero si el contrato dice que el dinero lo recibirás por:
Escribes un articulo O (OR) lo publicas en la web
Entonces únicamente habrás de hacer una de las dos cosas para cobrar tu dinero. Si un
contrato dice que se te pagará si:
NO (NOT), escribes ningún articulo este año.
Solo cobraras si en todo el año no escribes artículos.
La operación XOR, que significa OR exclusivo, simplemente cambia un estado binario
por otro, pero también puede sumar números binarios como veremos mas adelante.
Los ordenadores utilizan operaciones XOR para todo tipo de cosas. Si se aplica XOR
aun valor con su mismo valor, este se cancela y se obtiene un cero. Si deseas producir
animación gráfica, primero aplicas XOR a una imagen de la pantalla para dibujar algo
en un determinado lugar, y después se vuelve a aplicar XOR a la misma imagen y en la
misma posición, para volver a poner la pantalla tal y como estaba originalmente. Como
la segunda operación XOR borra la imagen, (cancelando los cambios), se puede mover
una imagen por toda la pantalla, haciendo que una operación XOR, la dibuje y borre
rápidamente.
MASCARAS DE BITS
Al aplicar una operación AND a cualquier valor ASCII con el valor decimal 223, todas
las letras en minúscula se ponen en mayúsculas sin que se modifiquen las letras
mayúsculas. AND funciona comparando dos valores, (el ejemplo siguiente comparará
un bit cada vez), y devolviendo un 1 solo cuando ambos valores son distintos de cero.
Tabla AND
1
1
0
0
AND
AND
AND
AND
1
0
1
0
=
=
=
=
1
0
0
0
En notación binaria, 223 es 1101 1111, y este numero puede funcionar como una
mascara de bits. Si se aplica una operación AND a cualquier numero binario de ocho
dígitos o menos con esta mascara todo permanecerá en cada posición tal y como estaba,
excepto el sexto dígito de la derecha, dejando también el 0 como estaba y cambiando los
1 por 0. A esto se le llama máscara porque enmascara cualquier cambio excepto el del
lugar donde se desea que se produzca el cambio: el 0 de la posición 2^5.
Puesto que A(65 decimal), es el valor binario 0100 0001, y a (97 decimal) es el valor
binario 0110 0001, aplicar AND a estos números con (223 decimal) en binario 1101
1111, podría ser representado como:
0100 0001
(65)
(A)
AND
1101 1111
(223) (Mascara)
0110 0001
(97)
(65)
(A)
à 0100 0001
(65)
(A)
(a)
AND
1101 1111
à 0100 0001
(223) (Mascara)
Si se aplica AND a un 0 o a un 1, con el valor 1 como mascara, deja en efecto el valor
tal y como estaba, pero si lo aplicamos con el valor 0 como mascara, entonces, al 0 lo
deja como 0 y al 1 lo convierte a 0.El numero binario 1101 1111 (223), hace que el bit
2^5, (el sexto por la derecha), se convierta en un 0,, y deja el valor del resto de bits, tal y
como estaba.
El cambio de un bit de o a 1 se conoce como activar el bit, y cambiarlo de 1 a 0 como
desactivar el bit. Así pues la única diferencia entre una letra minúscula, y la letra
correspondiente en mayúsculas, es que en la versión minúscula el sexto bit por la
derecha,(2^5), está activado. Al aplicar AND con 1101 1111 el bit se desactiva
convirtiéndolo en un 0, y reduciendo su valor ASCII en (32 decimal).
Para invertir el proceso y convertir letras mayúsculas en minúsculas se emplea la
operación lógica OR.
Tabla OR
1
1
0
0
OR
OR
OR
OR
1
0
1
0
=
=
=
=
1
1
1
0
Si se aplica OR a un 0 o a un 1, con el valor 0 como mascara, el valor se queda como
estaba, pero si lo aplicamos con el valor 1 como mascara, entonces los 1 se quedan
como están y los 0 se convierten en 1.
0100 0001
(65)
(A)
0010 0000
(32) (Mascara)
0110 0001
(97)
OR
(97)
(a)
à 0110 0001
(97)
(a)
(a)
OR
0010 0000
à 0110 0001
(32) (Mascara)
Al aplicar el 32 decimal como mascara, conseguimos activar el bit 2^5, (que en las
mayúsculas esta desactivado, y por tanto sumamos 32 decimal al valor ASCII), y
dejándolo como está en las minúsculas.
MIREMOS LOS HEXADECIMALES
A nadie le gusta trabajar con números binarios de ocho bits. Pero nuestro sistema
decimal, con el que mas cómodos nos sentimos, no es apto para el mundo de los
ordenadores de base dos. Sin embargo, un sistema numérico de base 16 si lo es, puesto
que todos los números binarios de ocho bits pueden ser expresados como dos dígitos de
base 16, o hexadecimales de forma conjunta. De hecho es mas fácil convertir números
binarios en hexadecimal y convertirlos de nuevo a binario , que convertirlos en decimal
y de nuevo a binario.
La numeración hexadecimal funciona igual que el sistema numérico decimal, excepto
que incluye seis dígitos mas. Los diez primeros dígitos son los mismos que los diez
dígitos decimales que usamos normalmente. Pero los dígitos acaban al llegar al 9.
Entonces, el sistema hexadecimal emplea las seis primeras letras del alfabeto.
0 (0)
1 (1)
2 (2)
3 (3)
4 (4)
5 (5)
6 (6)
7 (7)
8 (8)
9 (9)
10 (A)
11 (B)
12 (C)
13 (D)
14 (E)
15 (F)
A los programadores les gusta a veces trabajar con números hexadecimales de dos
dígitos, por lo que ponen ceros en el lado izquierdo, (0D, es lo mismo que D)
El sistema hexadecimal hace además que las conversiones binarias sean muy sencillas.
Por ejemplo, ¿cuál es el equivalente binario de FF?. Bien, esto es demasiado fácil,
puesto que es igual a 255, y 255 es el numero mas alto que se puede formar en binario
con 8 bits, (un byte), lo que significa que este numero debe estar compuesto todo de 1:
1111 1111
Tome cualquier otro numero hexadecimal: 0x3D, (61 decimal). Cada dígito
hexadecimal contiene la mitad de un numero binario de ocho dígitos. Recuerda que un
dígito binario es un bit y que 8 bits forman un byte, y que la mitad de un byte, (o sea 4
bits) se llama un nibble. (¿Lo entiendes?: ¿byte?, ¿nibble?)
En el valor hexadecimal 0x3d, el 3 es el nibble de la izquierda o alto, y la D es el nibble
de la derecha o bajo. En notación binaria, el 3 decimal es 0011, mientras que el 13, que
es a lo que equivale la D hexadecimal es 1101. Esto ya lo vimos antes.
Por tanto 3D hexadecimal es igual a 0011 1101.
Pasar de binario a hexadecimal, también es fácil. ¿A que equivale 1010 0101?
1010 = 0xA = 10
à
0101 = 0x5 = 3
1010 0101
=
0x105 = 165
Así pues 1010 0101 es 0xA5 en hexadecimal, o 165 en decimal. Fíjate que los
números 1 al 9 son lo mismo en decimal que en hexadecimal. La mayoría de la gente lo
entiende enseguida, pero siempre acaba cometiendo el mismo error, que consiste en
poner 10 después del nueve hexadecimal, cuando lo que se debe de poner es la letra A.
No te preocupes, pronto te acostumbrarás. En realidad no es tan difícil convertir
números hexadecimales de 2 dígitos en decimal. Primero convierte cada dígito a
decimal. En el ejemplo anterior, A es igual a 10, y 5 es igual a 5. Multiplica por 16 el
valor del dígito de la izquierda y sumale el dígito de la derecha:
(10 x 16) + 5 = 165.
Convertir un numero decimal igual o menor que 256 a hexadecimal solo es un poco mas
difícil. Primero divide el numero entre 16. Probablemente no sea una división exacta y
te encuentres con un cociente y un resto. Convierte el cociente a hexadecimal y después
convierte el resto y colócalo a la derecha del cociente (ya convertido). Obtendrás así el
hexadecimal buscado.
165/16 = 10
10 = A
5=5
A5
R=5
En el ejemplo anterior vemos como convertir el numero decimal 165 al hexadecimal
A5. Como colofón de este documento, quisiera decirte que si tu eres un profesional que
vas a trabajar frecuentemente con números binarios y/o hexadecimales, y mucho mas
aun, si vas a realizar operaciones con ellos, procura tener siempre a mano, una
calculadora semejante a la que incorpora Windows como accesorio, no te arrepentirás
XDD.
Oviedo, 6 de Marzo de 2000
Fdo: José Manuel Rodríguez Fernández
uLZaNa
Descargar