Iniciemos con la conversión de decimal a binario, para este tipo de conversiones se toma el numero decimal y se divide entre dos, el residuo será nuestro número binario y el resultado de la división se dividirá nuevamente esto hasta que el ultimo resultado de la división sea 1. Por ejemplo tomemos el número 10 en decimal.
10/2=5, con residuo 0, dividimos nuevamente 5/2=2, con residuo 1, dividimos nuevamente 2/2=1, con residuo 0, en este momento termina nuestro proceso, el ultimo 1 (el rojo) será nuestro MSB mientras que los residuos serán los demás bits siendo el primer residuo (el verde) el LSB, quedando de la siguiente manera 1010b.
De esta forma y aunque con números más grandes puede resultar tardado y confuso, con la práctica se perfeccionara este método.
Hagamos unas cuantas conversiones más, recordando que el primer residuo siempre será el bit menos significativo (LSB) de nuestro resultado y el ultimo 1 el bit más significativo (MSB). Tomemos los siguientes números decimales 15, 38, 46, 146 y 255, los residuos se pondrán después del resultado de color azul y el último 1 de color rojo.
15/2=7, 1, 7/2=3, 1, 3/2=1, 1. 1111b.
38/2=19, 0, 19/2=9, 1, 9/2=4, 1, 4/2=2, 0, 2/2=1, 0. 100110b.
46/2=23, 0, 23/2=11, 1, 11/2=5, 1, 5/2=2, 1, 2/2=1, 0. 101110b.
146/2=73, 0, 73/2=36, 1, 36/2=18, 0, 18/2=9, 0, 9/2=4, 1, 4/2=2, 0, 2/2=1, 0. 10010010b.
255/2=127, 1, 127/2=63, 1, 63/2=31, 1, 31/2=15, 1, 15/2=7, 1, 7/2=3, 1, 3/2=1, 1. 11111111b.
Ahora estos mismos números binarios vamos a convertirlos a octal, hexadecimal y decimal.
Conversión de binario a decimal. Para este tipo de conversión haremos algo parecido a lo que vimos en la entrada anterior para representar un número decimal, solo cambiaremos la base.
1111b = (1)(2^3) + (1)(2^2) + (1)(2^1) + (1)(2^0)
1111b= (1)(8) + (1)(4) + (1)(2) + (1)(1)
1111b= 8 + 4 + 2 + 1
1111b= 15d
100110b = (1)(2^5) + (0)(2^4) + (0)(2^3) + (1)(2^2) + (1)(2^1) + (0)(2^0)
100110b = (1)(32) + (0)(16) + (0)(8) + (1)(4) + (1)(2) + (0)(1)
100110b = 32 + 0 + 0 + 4 + 2 + 0, 100110b = 32 + 4 + 2
100110b = 38d.
101110b = (1)(2^5) + (0)(2^4) + (1)(2^3) + (1)(2^2) + (1)(2^1) + (0)(2^0)
101110b = (1)(32) + (0)(16) + (1)(8) + (1)(4) + (1)(2) + (0)(1)
101110b = 32 + 0 + 8 + 4 + 2 + 0, 101110b = 32 + 8 + 4 + 2
101110b = 46d.
Observemos que el valor donde existe un 0 no se toma en cuenta pues al multiplicar algo por 0 el resultado siempre será cero, mientras que en donde hay unos, se toma el valor de la potencia a la que esta elevada la base, hagamos la siguiente conversión para que quede un poco más claro.
10010010b = (1)(2^7) + (0)(2^6) + (0)(2^5) + (1)(2^4) + (0)(2^3) + (0)(2^2) + (1)(2^1) + (0)(2^0)
Aquí solo quedara el valor de 2^7, 2^4, 2^1, esto se utiliza para acortar el proceso, quedando de la siguiente manera
10010010b = 128 + 16 + 2
Esto sucede porque cualquier número multiplicado por 1 siempre dará el mismo número que se está multiplicando.
10010010b = 146d.
11111111b = (1)(2^7) + (1)(2^6) + (1)(2^5) + (1)(2^4) + (1)(2^3) + (1)(2^2) + (1)(2^1) + (1)(2^0)
Cuando se tiene un número binario de 8 bits con todos los bits en 1, el resultado será 255d.
11111111b = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
11111111b = 255d.
Para convertir a octal de binario tomamos grupos de 3 bits iniciando de derecha a izquierda, si el último grupo no nos alcanza para tomar tres bit se le agregan ceros a la izquierda para completarlo. Después a cada grupo se le asigna su valor en octal, este valor puede ser 1, 2, 3, 4, 5, 6, 7, para obtenerlo se hace algo similar a lo que hicimos con la conversión de binario a decimal, podemos apoyarnos de la siguiente tabla, hay que tener cuidado y no confundir este valor con el decimal, pues aunque sus símbolos coinciden, cuando tenemos un numero octal de 2 o más dígitos este valor es totalmente diferente. Por esta misma razón cuando se trabaja con diferentes bases numéricas siempre se debe indicar con cual estamos trabajando.
Binario
|
Octal
|
000
|
0
|
001
|
1
|
010
|
2
|
011
|
3
|
100
|
4
|
101
|
5
|
110
|
6
|
111
|
7
|
1111b = 001 111
1111b = 17o.
100110b = 100 110
100110b = 46o.
101110b = 101 110
101110b = 56o.
10010010b = 010 010 010
10010010b = 222o.
11111111b = 011 111 111
11111111b = 377o.
Para hacer conversiones de binario a hexadecimal se sigue un procedimiento muy similar, primero se toman grupos de 4 bits de derecha a izquierda, si el último grupo no tiene 4 bits se le agregan ceros a la izquierda para completarlo, estos grupos podrán tomar un valor de entre los siguientes, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, para obtener este valor se hace algo similar a lo que hicimos con la conversión de binario a decimal, podemos apoyarnos de la siguiente tabla.
Binario
|
Hexadecimal
|
0000
|
0
|
0001
|
1
|
0010
|
2
|
0011
|
3
|
0100
|
4
|
0101
|
5
|
0110
|
6
|
0111
|
7
|
1000
|
8
|
1001
|
9
|
1010
|
A
|
1011
|
B
|
1100
|
C
|
1101
|
D
|
1110
|
E
|
1111
|
F
|
1111b = 0xF.
Este número lo obtenemos de manera directa de la tabla, 0x es otra forma de escribir números hexadecimales y es la que usaremos a partir de ahora.
100110b = 0010 0110
100110b = 0x26.
101110b = 0010 1110
101110b = 0x2E.
10010010b = 1001 0010
10010010b = 0x92.
11111111b = 1111 1111
11111111b = 0xFF.
La tabla completa de equivalencias con 4 bits entre las diferentes bases es la siguiente.
Decimal
|
Binario
|
Octal
|
hexadecimal
|
0
|
0000
|
00
|
0
|
1
|
0001
|
01
|
1
|
2
|
0010
|
02
|
2
|
3
|
0011
|
03
|
3
|
4
|
0100
|
04
|
4
|
5
|
0101
|
05
|
5
|
6
|
0110
|
06
|
6
|
7
|
0111
|
07
|
7
|
8
|
1000
|
10
|
8
|
9
|
1001
|
11
|
9
|
10
|
1010
|
12
|
A
|
11
|
1011
|
13
|
B
|
12
|
1100
|
14
|
C
|
13
|
1101
|
15
|
D
|
14
|
1110
|
16
|
E
|
15
|
1111
|
17
|
F
|
Ahora para convertir los números octales y hexadecimales a decimal, se emplea la misma metodología que del sistema binario a decimal. Iniciemos con las conversiones octales a decimal.
17o, para convertir este número necesitamos saber el equivalente del símbolo en decimal, por lo cual para el sistema octal no hay complicación pues el símbolo 3, equivale a un 3 en decimal, después de hacer esto lo multiplicamos por la base elevada a la potencia que le corresponde. Veamos un ejemplo.
17o = (1)(8^1) + (7)(8^0)
17o = (1)(8) + (7)(1)
17o = 8 +7
17o = 15d.
Ahora con los demás.
46o = (4)(8^1) + (6)(8^0)
46o = (4)(8) + (6)(1)
46o = 32 +6
46o = 38d.
En este ejemplo se observa un poco mejor el procedimiento, obsérvese que una vez obtenido el valor de la base elevada a la potencia, se multiplica de forma habitual como en el sistema decimal.
56o = (5)(8^1) + (6)(8^0)
56o = (5)(8) + (6)(1)
56o = 40 + 6
56o = 46d.
222o = (2)(8^2) + (2)(8^1) + (2)(8^0)
222o = (2)(64) + (2)(8) + (2)(1)
222o = 128 + 16 + 2
222o = 146d.
377o = (3)(8^2) + (7)(8^1) + (7)(8^0)
377o = (3)(64) + (7)(8) + (7)(1)
377o = 192 + 56 + 7
377o = 255d.
Para convertir de hexadecimal a decimal se sigue el mismo procedimiento solamente cambiando la base 8 por la base 16 y teniendo en consideración los valores decimales de A, B, C, D, E, F, para esto podemos apoyarnos de la tabla anterior.
0xF = 15d
0x26 = (2)(16^1) + (6)(16^0)
0x26 = (2)(16) + (6)(1)
0x26 = 32 + 6
0x26 = 38d.
0x2E = (2)(16^1) + (E)(16^0)
0x2E = (2)(16) + (E)(1)
0x2E = (2)(16) + (14)(1)
0x2E= 32 + 14
0x2E = 46d.
0x92 = (9)(16^1) + (2)(16^0)
0x92 = (9)(16) + (2)(1)
0x92 = 144 + 2
0x92= 146d
0xFF = (F)(16^1) + (F)(16^0)
0xFF = (F)(16) + (F)(1)
0xFF = (15)(16) + (15)(1)
0x2E= 240 + 15
0x2E = 255d.
Las conversiones de decimal a octal y hexadecimal son muy similares al proceso de decimal a binario, pero se divide entre 8 o 16 para octal y hexadecimal respectivamente. El resultado no debe ser fraccionario. Por lo cual cuando ya no se puede dividir entre la base el proceso termina.
Tomemos el número 46 y convirtámoslo primeramente a octal y posteriormente a hexadecimal.
46/8 = 5 con residuo 6, como 5 ya no se puede dividir entre 8 el procedimiento termina y se sigue la misma lógica que con el binario, el primer residuo será el número menos significativo, por lo cual nuestro número octal será 56o.
46d=56o.
Para la conversión a hexadecimal se debe tener cuidado pues si el número del residuo o resultado es mayor a 9 se tendrá que colocar su equivalente en hexadecimal (A, B, C, D, E, F).
46/16 = 2 con residuo 14, como 2 ya no se puede dividir entre 16 el procedimiento termina, 14 será el número menos significativo, pero como 14 es mayor que 9 se toma su valor hexadecimal, por lo cual nuestro numero hexadecimal quedaría de la siguiente forma 0x2E.
46d=0x2E.
En la siguiente tabla se observa el valor del mismo número en diferentes bases.
Decimal
|
Binario
|
Octal
|
Hexadecimal
|
15
|
00001111
|
017
|
0F
|
38
|
00100110
|
046
|
26
|
46
|
00101110
|
056
|
2E
|
146
|
10010010
|
222
|
92
|
255
|
11111111
|
377
|
FF
|
Espero la información te sea de utilidad, te dejo unos números para que practiques las conversiones entre diferentes bases.
230d, 286d, 222d, 187d, 25d, 0x3A, 0x45, 0xF7, 0xDC, 0xAA, 735o, 254o, 356o, 156o, 244o, 1101010b, 10101010b, 11110001b, 10000001b, 10110110b.
Esperen la siguiente entrada, si tienen dudas, sugerencias o simplemente quieren compartir su opinión sobre el blog, no olviden dejar sus comentarios.
Gracias por leerme, hasta la próxima.
No hay comentarios.:
Publicar un comentario