2014-03-26

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