Ningún trozo pasa de 255
Mira la dirección IP de tu móvil en la wifi del instituto. Suele parecerse a 192.168.1.37.
Son cuatro números separados por puntos, y ninguno pasa nunca de 255. No es una casualidad. Cada uno se guarda en ocho interruptores diminutos. Al final de esta lección sabrás por qué ocho interruptores llegan justo a 255.
Al terminar esta lección
Nota
Puedo guardar números enteros en binario y en hexadecimal.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Bit | una cifra binaria, un 0 o un 1 | |
| Byte | un grupo de ocho bits | |
| Decimal | la forma de contar de siempre, con las cifras 0 a 9 | |
| Binario | contar solo con las cifras 0 y 1 | 100101 |
| Valor posicional | lo que vale una cifra según el sitio que ocupa | |
| Hexadecimal | contar de dieciséis en dieciséis, con 0 a 9 y A a F | C0 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra superior. Es una máquina Ubuntu entera para ti, así que tarda un minuto en arrancar. Cada botón Ejecutar escribe su comando en el terminal de la máquina. Si dice que aún está arrancando, espera y vuelve a pulsarlo.
El binario solo usa 0 y 1
Dentro de un ordenador, cada número lo guardan interruptores apagados o encendidos. Apagado se escribe 0 y encendido, 1.
En decimal, cada posición vale diez veces más que la de su derecha. En binario, cada posición vale el doble. Un byte tiene ocho posiciones: 128, 64, 32, 16, 8, 4, 2 y 1. Suma las posiciones que tienen un 1.
Ejemplo resuelto: 37 en un byte
| Valor posicional | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| Bit | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
| Vale | 0 | 0 | 32 | 0 | 0 | 4 | 0 | 1 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Entra en la carpeta arch
cd ~/archSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide a Python el 37 en binario
python3 -c "print(bin(37))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Vuelve a convertir los bits en decimal
python3 -c "print(int('100101', 2))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Dividir entre dos da los bits
Para pasar un número a binario, divídelo entre 2 y apunta el resto. Divide otra vez el resultado entre 2. Sigue hasta llegar a 0.
Los restos son los bits. Léelos de abajo arriba, del último al primero.
Ejemplo resuelto: 11 dividiendo entre dos
| Número | Entre 2 | Resto |
|---|---|---|
| 11 | 5 | 1 |
| 5 | 2 | 1 |
| 2 | 1 | 0 |
| 1 | 0 | 1 |
| Leído de abajo arriba | 1011 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La terminal también lee binario
echo $((2#1011))Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente lee el binario desde la izquierda, como si el primer bit valiera 1. El bit que vale 1 es el de la derecha. Cada posición hacia la izquierda vale el doble. Por eso 1000 es ocho y 0001 es uno.
El hexadecimal resume el binario
Las filas largas de bits cuestan de leer. El hexadecimal cuenta de dieciséis en dieciséis. Usa de 0 a 9 y después de A a F, que valen de diez a quince.
Una cifra hexadecimal equivale justo a cuatro bits. Así, un byte son siempre dos cifras. Parte el byte en dos mitades de cuatro bits y escribe cada mitad como una cifra.
Ejemplo resuelto: bytes en hexadecimal
| Decimal | Binario | Las dos mitades | Hexadecimal |
|---|---|---|---|
| 192 | 11000000 | 1100 es 12, 0000 es 0 | C0 |
| 168 | 10101000 | 1010 es 10, 1000 es 8 | A8 |
| 255 | 11111111 | 1111 es 15, 1111 es 15 | FF |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La terminal escribe 192 en hexadecimal
printf '%x\n' 192Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pide a Python dos más
python3 -c "print(hex(168), hex(255))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos: la dirección entera
La dirección 192.168.1.37 son cuatro bytes. Escribe cada uno en binario, con sus ocho bits, a mano.
Después compruébalo con to_binary de la tarea. ¿Cuántos bits tiene la dirección entera? ¿Cuántas direcciones distintas caben en esos bits?