Este anexo viene acompañado de una cápsula explicativa: Accede a la cápsula aquí!
Anexo: conversión entre sistemas numéricos
En arquitectura de computadores usamos distintas formas de escribir un mismo número. La base indica cuántos símbolos podemos usar para cada posición:
| Sistema | Base | Dígitos disponibles | Ejemplo del número cuarenta y cinco |
|---|---|---|---|
| Decimal | 10 | 0 a 9 | |
| Binario | 2 | 0 y 1 | |
| Hexadecimal | 16 | 0 a 9 y A a F |
En hexadecimal, A, B, C, D, E y F representan, respectivamente, los valores decimales 10, 11, 12, 13, 14 y 15. Las letras minúsculas significan lo mismo.
Cómo reconocer la base
En las expresiones matemáticas, el subíndice indica la base: , y representan el mismo valor. En el ramo escribiremos los binarios sin un prefijo adicional y distinguiremos los hexadecimales con 0x: por ejemplo, y 0x2D. El prefijo 0x indica que el número está en base 16; esos caracteres no forman parte de su valor. Es común verlo en direcciones de memoria, registros y volcados de memoria. También se puede escribir cuando se indica la base con un subíndice.
El sistema binario sirve para expresar los bits que almacena y procesa el computador. El hexadecimal permite escribir valores binarios largos de manera más compacta; por eso aparece con frecuencia en direcciones, instrucciones y datos de bajo nivel. El decimal es el sistema que usamos habitualmente para contar y comunicar cantidades.
La idea común: valor posicional
Se cuentan las posiciones desde la derecha, comenzando en cero. Cada dígito aporta su valor multiplicado por la base elevada a la posición:
Aquí es la base y es el valor del dígito en la posición . En binario usamos potencias de 2; en hexadecimal, potencias de 16. Por ejemplo, en decimal .
De binario a decimal
Ejemplo: convertir a decimal.
- Numera las posiciones desde la derecha: .
- Multiplica cada bit por la potencia de 2 de su posición.
- Suma los productos.
| Posición | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|
| Bit | 1 | 0 | 1 | 1 | 0 | 1 |
| Aporte | 32 | 0 | 8 | 4 | 0 | 1 |
Un 0 no aporta valor, pero conserva su posición. Omitirlo cambiaría el número.
De decimal a binario
Ejemplo: convertir a binario. Buscamos qué potencias de 2 suman 45. Una potencia presente recibe el bit 1; una ausente recibe el bit 0.
- La mayor potencia que cabe en 45 es . Restamos: . Escribimos
1en la posición 5. - no cabe en 13. Escribimos
0en la posición 4. - cabe: . Escribimos
1en la posición 3. - cabe: . Escribimos
1en la posición 2. - no cabe en 1. Escribimos
0en la posición 1. - cabe: . Escribimos
1en la posición 0.
Leemos los bits desde la potencia mayor hasta la menor: . Podemos comprobarlo con la suma de la sección anterior: .
De hexadecimal a decimal
Ejemplo: convertir a decimal. Primero reemplazamos las letras por sus valores: A vale 10 y F vale 15. Luego multiplicamos cada dígito por su potencia de 16.
| Posición | 2 | 1 | 0 |
|---|---|---|---|
| Dígito | 2 | A | F |
| Valor | 2 | 10 | 15 |
| Aporte | 512 | 160 | 15 |
El prefijo hexadecimal no modifica el cálculo: 0x2AF es otra forma de escribir .
De decimal a hexadecimal
Ejemplo: convertir a hexadecimal. Buscamos cuántas veces cabe cada potencia de 16, de mayor a menor. En cada posición el coeficiente debe estar entre 0 y 15.
- cabe 2 veces: . Restan .
- cabe 10 veces en 175: . Restan . El dígito de valor 10 se escribe
A. - cabe 15 veces: . No queda resto. El dígito de valor 15 se escribe
F.
Por lo tanto, , que escribiremos 0x2AF usando la convención del ramo. La comprobación consiste en desarrollar sus posiciones: .
Para recordar el procedimiento
Hacia decimal: multiplica cada dígito por la base elevada a su posición y suma. Desde decimal: encuentra los coeficientes de esas mismas potencias, de la mayor a la menor. La base es 2 para binario y 16 para hexadecimal.