Back To basics #1 - Convirtiendo números en diferentes bases a decimal..
Hola de nuevo a todos el día de hoy vamos a ver un tema un tanto sencillo.
Hace algunos días, mientras navegaba por un foro de programación, me encontré con alguien que mostraba cómo hacer la conversión de un numero hexadecimal a decimal, al entrar todo estaba bien, o al menos eso era en apariencia, ya que al momento de explicar cual era el sentido de hacer la conversión no supo que decir (aun teniendo el internet a la mano), entonces una lluvia de criticas le cayeron. El único argumento que pudo dar en su defensa fue: "Pues háganlo ustedes". Y bueno aquí vamos.
Hace algunos días, mientras navegaba por un foro de programación, me encontré con alguien que mostraba cómo hacer la conversión de un numero hexadecimal a decimal, al entrar todo estaba bien, o al menos eso era en apariencia, ya que al momento de explicar cual era el sentido de hacer la conversión no supo que decir (aun teniendo el internet a la mano), entonces una lluvia de criticas le cayeron. El único argumento que pudo dar en su defensa fue: "Pues háganlo ustedes". Y bueno aquí vamos.
Por qué usar una base diferente a 10?
En compactan hay que recordar que internamente se usan solo dos números: el 1 y el 0, que son la cantidad mínima representable (encendido o apagado). Para trabajar en la computadora se usan Bytes y cada Byte esta compuesto de ocho bits, entonces el numero máximo que se puede representar usando ocho bits es 11111111 (hay que tener algunas consideraciones con respecto a como se interpretan los datos en una computadora, pero por ahora solo convertiremos ese numero en "crudo").
La computadora entenderá perfectamente esos numero, pero que pasa si un humano quiere saber cual es el numero que representa 10010001? Para eso es necesario convertirlo a una base con la que ya estemos familiarizados.
Los números se pueden representar en cualquier base a partir de 2, puede ser base 3, base 5, incluso base 20. La base con la que estamos familiarizados es la base 10, pero antes de seguir, de seguro te preguntas: que es una base? Bien, la explicación mas sencilla es, la cantidad de números disponibles para representar un valor mas grande. Por ejemplo, en un numero de base dos, solo se dispone de los números 0 y 1. En un numero de base diez, se disponen de los números 1,2,3,4,5,6,7,9,0. Para representar un número más grande que diez, se empiezan a usar las potencias de diez y para el caso de la base dos, para representar un numero más grande que dos se usaran potencias de dos.
Para continuar con el meollo del asunto, ahora sabemos que ocho bits pueden representar el numero 11111111 en base dos, para convertirlo, solo vamos a multiplicar el valor de cada numero por su potencia correspondiente empezando de izquierda hacia la derecha y se empezara por la base elevada a la potencia cero.
2^7 (128) | 2^6 (64) | 2^5 (32) | 2^4 (16) | 2^3 (8) | 2^2 (4) | 2^1 (2) | 2^0 (1) |
---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Mirando la tabla anterior tenemos que el valor de 11111111 en base dos es igual a la suma de 2^0 hasta 2^7, haciendo la cuenta esto resulta en 255 decimal. Para convertir el numero 10010001 de base dos a base 10, debemos de hacer lo mismo que hicimos antes, debemos de multiplicar el valor del dígito por si potencia y tendriamos algo cómo lo que sigue:
Al hacer las sumas obtenemos que el número 10010001 de base dos es igual a 145 en base 10.
Y ahora la pregunta del millon, por que usar la base 16? La base 16 es muy comun usarla para representar los numero en computacion, si recuerdas los post: "Cómo extraer una imagen embebida en un mp3", usabamos un visor hexadecimal para ver la informacion dentro del mp3.
Esto es así debido a que el número 11111111 (255) es equivalente a FF en hexadecimal. Antes de seguir hay que saber esto. Para evita confusiones, cuando usamos una base que tiene digitos más alla de nuestro 9, debemos de usar símbolos, asi evitamos confundir números, en el caso del hexadecimal, se deben de usar 16 caracteres para representar, entonces empezamos desde el 0 hasta la F, despues del 9 seguiría el 10, para evitar confusiones usamos la letra A(10), B(11), C(12), D(13), E(14) y F(15).
Al igual que con la base dos, se usaran potencias, pero en este caso serán potencia del número 16
entonces para representar el el numero 11111111 solo debemos de usar dos dígitos en base 16, basta con usar FF para representar cada valor posible de un byte. para valores hexadecimales más grandes, bastará con usar la siguientes potencias.
Y bien, por ahora es todo, en el siguiente post vamos a hacer el proceso inverso y más adelante una aplicación para android que convierta entre cualquier base.
Los leo luego.
2^7 (128) | 2^6 (64) | 2^5 (32) | 2^4 (16) | 2^3 (8) | 2^2 (4) | 2^1 (2) | 2^0 (1) |
---|---|---|---|---|---|---|---|
1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
Y ahora la pregunta del millon, por que usar la base 16? La base 16 es muy comun usarla para representar los numero en computacion, si recuerdas los post: "Cómo extraer una imagen embebida en un mp3", usabamos un visor hexadecimal para ver la informacion dentro del mp3.
Esto es así debido a que el número 11111111 (255) es equivalente a FF en hexadecimal. Antes de seguir hay que saber esto. Para evita confusiones, cuando usamos una base que tiene digitos más alla de nuestro 9, debemos de usar símbolos, asi evitamos confundir números, en el caso del hexadecimal, se deben de usar 16 caracteres para representar, entonces empezamos desde el 0 hasta la F, despues del 9 seguiría el 10, para evitar confusiones usamos la letra A(10), B(11), C(12), D(13), E(14) y F(15).
Al igual que con la base dos, se usaran potencias, pero en este caso serán potencia del número 16
16^1 (16) | 16^0 (1) |
---|---|
F | F |
entonces para representar el el numero 11111111 solo debemos de usar dos dígitos en base 16, basta con usar FF para representar cada valor posible de un byte. para valores hexadecimales más grandes, bastará con usar la siguientes potencias.
Y bien, por ahora es todo, en el siguiente post vamos a hacer el proceso inverso y más adelante una aplicación para android que convierta entre cualquier base.
Los leo luego.
No hay comentarios.