Cálculo mental para informáticos
Los ordenadores se crearon para ayudarnos en tareas de cálculo muy avanzadas y tediosas pero ese propósito inicial ha degenerado en el abandono total del cálculo mental. Me incluyo entre los que utilizan una calculadora hasta para las operaciones más básicas, no porque no pudiera hacerlas mentalmente sino por pura vagancia. Sin embargo hay un conjunto de operaciones que todos los informáticos deberían saber. En este post voy a cubrir el paso de bits a Bytes, los prefijos y la conversión de números decimales a binarios y hexadecimales. El conocimiento y dominio de estas operaciones nos dará soltura y nos hará parecer más profesionales.
Lo primero que hay que saberse de memoria es la "tabla del 2". La he ampliado hasta la 12ª potencia porque es actualmente el límite que se utiliza aunque también he calculado el tamaño de los 32 y 64 bits como curiosidad.
2 0 = 1
2 1 = 2
2 2 = 4
2 3 = 8
2 4 = 16
2 5 = 32
2 6 = 64
2 7 = 128
2 8 = 256
2 9 = 512
2 10 = 1.024
2 11 = 2.048
2 12 = 4.096
...
2 32 = 4.294.967.296
...
2 64 = 18.446.744.073.709.551.616
A partir de la "tabla del 2" vamos a conseguir convertir de Bytes a bits y viceversa de una forma muy sencilla porque 2 3 = 8 o lo que es lo mismo, 8 = 2x2x2. Multiplicar por ocho no me resulta complicado pero dividir por 8 es otra historia. Mi truco es dividir sucesivamente de tal modo que b/8 = b/2/2/2 = B.
Algo en lo que incluso algún informático falla es al hablar de prefijos. Hay que tener bien clara la diferencia entre los decimales y los binarios para hablar con propiedad. Para zanjar el tema dejo una tabla en la que recojo los prefijos del sistema métrico internacional y los binarios según la norma IEC 80000-13:2008. Aunque aparezcan en la misma línea, no son iguales. Lo pongo así por comodidad.
PREFIJO | SÍMBOLO | 10 n | 2 m | SÍMBOLO | PREFIJO | ||
---|---|---|---|---|---|---|---|
yotta | Y | 10 24 | 2 80 | Yi | yobi | ||
zetta | Z | 10 21 | 2 70 | Zi | zebi | ||
exa | E | 10 18 | 2 60 | Ei | exbi | ||
peta | P | 10 15 | 2 50 | Pi | pebi | ||
tera | T | 10 12 | 2 40 | Ti | tebi | ||
giga | G | 10 9 | 2 30 | Gi | gibi | ||
mega | M | 10 6 | 2 20 | Mi | mebi | ||
kilo | k | 10 3 | 2 10 | Ki | kibi |
La conversión a números binarios y hexadecimales solo es útil si estamos programando en lenguajes de bajo nivel pero también es una habilidad que sorprenderá a nuestros amigos menos frikis. Antes de empezar hay que tener en cuenta que es muy recomendable utilizar los prefijos 0b y 0x para los números binarios y hexadecimales, respectivamente, cuando sea dudoso.
Para convertir a binario un número decimal hay que dividirlo sucesivamente por dos hasta que el divisor sea 1. La cadena formada por los restos de las sucesivas divisiones ordenados de forma inversa es el número binario. Para convertir de decimal a hexadecimal hay que hacer lo mismo pero dividiendo por 16 aunque también se puede descomponer en 4 pasos de divisiones entre 2.
Además os dejo una tabla con todos los valores hasta el 256 por si alguien necesita consultar algún número en concreto o para comprobar que nuestros cálculos son correctos mientras aprendemos esta frikada inútil.
0d | 0b | 0x | 0d | 0b | 0x | 0d | 0b | 0x | ||
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 86 | 1010110 | 56 | 171 | 10101011 | AB | ||
1 | 1 | 1 | 87 | 1010111 | 57 | 172 | 10101100 | AC | ||
2 | 10 | 2 | 88 | 1011000 | 58 | 173 | 10101101 | AD | ||
3 | 11 | 3 | 89 | 1011001 | 59 | 174 | 10101110 | AE | ||
4 | 100 | 4 | 90 | 1011010 | 5A | 175 | 10101111 | AF | ||
5 | 101 | 5 | 91 | 1011011 | 5B | 176 | 10110000 | B0 | ||
6 | 110 | 6 | 92 | 1011100 | 5C | 177 | 10110001 | B1 | ||
7 | 111 | 7 | 93 | 1011101 | 5D | 178 | 10110010 | B2 | ||
8 | 1000 | 8 | 94 | 1011110 | 5E | 179 | 10110011 | B3 | ||
9 | 1001 | 9 | 95 | 1011111 | 5F | 180 | 10110100 | B4 | ||
10 | 1010 | A | 96 | 1100000 | 60 | 181 | 10110101 | B5 | ||
11 | 1011 | B | 97 | 1100001 | 61 | 182 | 10110110 | B6 | ||
12 | 1100 | C | 98 | 1100010 | 62 | 183 | 10110111 | B7 | ||
13 | 1101 | D | 99 | 1100011 | 63 | 184 | 10111000 | B8 | ||
14 | 1110 | E | 100 | 1100100 | 64 | 185 | 10111001 | B9 | ||
15 | 1111 | F | 101 | 1100101 | 65 | 186 | 10111010 | BA | ||
16 | 10000 | 10 | 102 | 1100110 | 66 | 187 | 10111011 | BB | ||
17 | 10001 | 11 | 103 | 1100111 | 67 | 188 | 10111100 | BC | ||
18 | 10010 | 12 | 104 | 1101000 | 68 | 189 | 10111101 | BD | ||
19 | 10011 | 13 | 105 | 1101001 | 69 | 190 | 10111110 | BE | ||
20 | 10100 | 14 | 106 | 1101010 | 6A | 191 | 10111111 | BF | ||
21 | 10101 | 15 | 107 | 1101011 | 6B | 192 | 11000000 | C0 | ||
22 | 10110 | 16 | 108 | 1101100 | 6C | 193 | 11000001 | C1 | ||
23 | 10111 | 17 | 109 | 1101101 | 6D | 194 | 11000010 | C2 | ||
24 | 11000 | 18 | 110 | 1101110 | 6E | 195 | 11000011 | C3 | ||
25 | 11001 | 19 | 111 | 1101111 | 6F | 196 | 11000100 | C4 | ||
26 | 11010 | 1A | 112 | 1110000 | 70 | 197 | 11000101 | C5 | ||
27 | 11011 | 1B | 113 | 1110001 | 71 | 198 | 11000110 | C6 | ||
28 | 11100 | 1C | 114 | 1110010 | 72 | 199 | 11000111 | C7 | ||
29 | 11101 | 1D | 115 | 1110011 | 73 | 200 | 11001000 | C8 | ||
30 | 11110 | 1E | 116 | 1110100 | 74 | 201 | 11001001 | C9 | ||
31 | 11111 | 1F | 117 | 1110101 | 75 | 202 | 11001010 | CA | ||
32 | 100000 | 20 | 118 | 1110110 | 76 | 203 | 11001011 | CB | ||
33 | 100001 | 21 | 119 | 1110111 | 77 | 204 | 11001100 | CC | ||
34 | 100010 | 22 | 120 | 1111000 | 78 | 205 | 11001101 | CD | ||
35 | 100011 | 23 | 121 | 1111001 | 79 | 206 | 11001110 | CE | ||
36 | 100100 | 24 | 122 | 1111010 | 7A | 207 | 11001111 | CF | ||
37 | 100101 | 25 | 123 | 1111011 | 7B | 208 | 11010000 | D0 | ||
38 | 100110 | 26 | 124 | 1111100 | 7C | 209 | 11010001 | D1 | ||
39 | 100111 | 27 | 125 | 1111101 | 7D | 210 | 11010010 | D2 | ||
40 | 101000 | 28 | 126 | 1111110 | 7E | 211 | 11010011 | D3 | ||
41 | 101001 | 29 | 127 | 1111111 | 7F | 212 | 11010100 | D4 | ||
42 | 101010 | 2A | 128 | 10000000 | 80 | 213 | 11010101 | D5 | ||
43 | 101011 | 2B | 129 | 10000001 | 81 | 214 | 11010110 | D6 | ||
44 | 101100 | 2C | 130 | 10000010 | 82 | 215 | 11010111 | D7 | ||
45 | 101101 | 2D | 131 | 10000011 | 83 | 216 | 11011000 | D8 | ||
46 | 101110 | 2E | 132 | 10000100 | 84 | 217 | 11011001 | D9 | ||
47 | 101111 | 2F | 133 | 10000101 | 85 | 218 | 11011010 | DA | ||
48 | 110000 | 30 | 134 | 10000110 | 86 | 219 | 11011011 | DB | ||
49 | 110001 | 31 | 135 | 10000111 | 87 | 220 | 11011100 | DC | ||
50 | 110010 | 32 | 136 | 10001000 | 88 | 221 | 11011101 | DD | ||
51 | 110011 | 33 | 137 | 10001001 | 89 | 222 | 11011110 | DE | ||
52 | 110100 | 34 | 138 | 10001010 | 8A | 223 | 11011111 | DF | ||
53 | 110101 | 35 | 139 | 10001011 | 8B | 224 | 11100000 | E0 | ||
54 | 110110 | 36 | 140 | 10001100 | 8C | 225 | 11100001 | E1 | ||
55 | 110111 | 37 | 141 | 10001101 | 8D | 226 | 11100010 | E2 | ||
56 | 111000 | 38 | 142 | 10001110 | 8E | 227 | 11100011 | E3 | ||
57 | 111001 | 39 | 143 | 10001111 | 8F | 228 | 11100100 | E4 | ||
58 | 111010 | 3A | 144 | 10010000 | 90 | 229 | 11100101 | E5 | ||
59 | 111011 | 3B | 145 | 10010001 | 91 | 230 | 11100110 | E6 | ||
60 | 111100 | 3C | 146 | 10010010 | 92 | 231 | 11100111 | E7 | ||
61 | 111101 | 3D | 147 | 10010011 | 93 | 232 | 11101000 | E8 | ||
62 | 111110 | 3E | 148 | 10010100 | 94 | 233 | 11101001 | E9 | ||
63 | 111111 | 3F | 149 | 10010101 | 95 | 234 | 11101010 | EA | ||
64 | 1000000 | 40 | 150 | 10010110 | 96 | 235 | 11101011 | EB | ||
65 | 1000001 | 41 | 151 | 10010111 | 97 | 236 | 11101100 | EC | ||
66 | 1000010 | 42 | 152 | 10011000 | 98 | 237 | 11101101 | ED | ||
67 | 1000011 | 43 | 153 | 10011001 | 99 | 238 | 11101110 | EE | ||
68 | 1000100 | 44 | 154 | 10011010 | 9A | 239 | 11101111 | EF | ||
69 | 1000101 | 45 | 155 | 10011011 | 9B | 240 | 11110000 | F0 | ||
70 | 1000110 | 46 | 156 | 10011100 | 9C | 241 | 11110001 | F1 | ||
71 | 1000111 | 47 | 157 | 10011101 | 9D | 242 | 11110010 | F2 | ||
72 | 1001000 | 48 | 158 | 10011110 | 9E | 243 | 11110011 | F3 | ||
73 | 1001001 | 49 | 159 | 10011111 | 9F | 244 | 11110100 | F4 | ||
74 | 1001010 | 4A | 160 | 10100000 | A0 | 245 | 11110101 | F5 | ||
75 | 1001011 | 4B | 161 | 10100001 | A1 | 246 | 11110110 | F6 | ||
76 | 1001100 | 4C | 162 | 10100010 | A2 | 247 | 11110111 | F7 | ||
77 | 1001101 | 4D | 163 | 10100011 | A3 | 248 | 11111000 | F8 | ||
78 | 1001110 | 4E | 164 | 10100100 | A4 | 249 | 11111001 | F9 | ||
79 | 1001111 | 4F | 165 | 10100101 | A5 | 250 | 11111010 | FA | ||
80 | 1010000 | 50 | 166 | 10100110 | A6 | 251 | 11111011 | FB | ||
81 | 1010001 | 51 | 167 | 10100111 | A7 | 252 | 11111100 | FC | ||
82 | 1010010 | 52 | 168 | 10101000 | A8 | 253 | 11111101 | FD | ||
83 | 1010011 | 53 | 169 | 10101001 | A9 | 254 | 11111110 | FE | ||
84 | 1010100 | 54 | 170 | 10101010 | AA | 255 | 11111111 | FF | ||
85 | 1010101 | 55 |