Conversión de binario a decimal

El uso de los números binarios es mas importante de lo que mucha gente cree. Se trata del lenguaje que el ordenador entiende, ya que este interpreta diferencias de voltaje como 1 (true o HI) y 0 (false o LO). Cada byte de información está compuesto por ocho dígitos binarios, y a cada cifra 0 o 1 se le llama bit. El número utilizado en el ejemplo, el 10110100, sería un byte, y cada una de sus ocho cifras, un bit. Imaginemos que tenemos el número binario 0. Al sumarle una unidad, este número binario cambiará a 1. Sin embargo, si volvemos a añadirle otra unidad, este número en formato binario será el 10 (aumenta la cifra a la izquierda, que era 0, y la anterior toma el valor mínimo). Sumemos ahora otra unidad y el aspecto del número será 11 (tres en decimal). Y podríamos seguir.

Binario Decimal
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 10
1011 11
\vdots \vdots

 

Esto nos permite establecer un sistema bastante sencillo de conversión del binario al decimal. A partir de ahora, cuando escribamos un número binario, lo haremos con la notación usual, con una "b" al final del número (ej.: 10110100b)

Bien, pero ahora nos falta saber que hay que hacer para convertir un número binario a decimal. Para ello hemos de aplicar la siguiente notación matemática:

\displaystyle \sum_{i=0}^{n=bits-1} b_{i} \cdot 2^{n-i}

Donde b es el valor del bit binario en cada iteración, o sea, 0 (false) o 1 (true), y bits es el número de bits a convertir por ejemplo 10110100 es un byte por que tiene 8 bits, así que en este caso bits = 8. Así que, si queremos convertir el número binario 10110100 de 8 bits a decimal sería de la siguiente forma:

1 0 1 1 0 1 0 0
1_{0} \cdot 2^7 0_{1} \cdot 2^6  1_{2} \cdot 2^5 1_{3} \cdot 2^4 0_{4} \cdot 2^3 1_{5} \cdot 2^2 0_{6} \cdot 2^1 0_{7} \cdot 2^0

Sumando cada cálculo de bit quedaría:

1 \cdot 2^7+0+1 \cdot 2^5+1 \cdot 2^4+0+1 \cdot 2^2+0+0 \Rightarrow
\Rightarrow 128+32+16+4=180

Y finalmente se escribe:

10110100b=180

Curioso número 9

Esto es un poco freak, aun así... con la siguiente lógica de "la raíz digital de un número de partida" se puede demostrar que con cualquier número entero positivo mayor que 9 (\{x \in \mathbb{Z} \ | \ x>9\}) se puede obtener el número 9, probadlo:

#!/usr/bin/bash
 
clear
 
printf "\nIntroduce número cualquiera mayor que 9, sin espacios: "
read f
 
r=`for ((i=0;i<${#f};i++));do echo "$RANDOM ${f:$i:1}";done | sort -u | awk '{print $2}' | egrep -v '0' | awk '{printf "%s",$0}';printf "\n"`
 
if (( "$f" > "$r" ))
then
	let q=$f-$r
else
	let q=$r-$f
fi
 
n=0
for ((i=0;i<${#q};i++))
do
	((n=$n+${q:$i:1}))
done
 
x=0
for ((z=0;z<${#n};z++))
do
	((x=$x+${n:$z:1}))
done
 
printf "%-19.19s%s\n" "NUMERO:" "$f"
printf "%-19.19s%s\n" "ORDENACION RANDOM:" "$r"
printf "%-19.19s%s\n" "RESTO:" "$q"
printf "%-19.19s%s\n" "SUMA CIFRAS RESTO:" "$n"
printf "%-19.19s%s\n" "SUMA:" "$x"
  1. Introducimos un número cualquiera, sin espacios.
  2. Generamos un segundo número con una alteración aleatoria del orden de las cifras del primer número.
  3. Obtenemos el resto entre el mayor y el menor de los dos primeros números.
  4. Sumamos las cifras de ese resto y dan como resultado un tercer número.
  5. Finalmente sumamos las cifras de este tercer número y... siempre se obtiene el número 9.

Ejemplo:

#Introduce número cualquiera mayor que 9, sin espacios: 239487978234

NUMERO:            239487978234
ORDENACION RANDOM: 822798334497
RESTO:             583310356263
SUMA CIFRAS RESTO: 45
SUMA:              9
  • \{ x \in \mathbb{Z} \ | \ x<9\}
  • x=239487978234 \Rightarrow x^\prime=822798334497
  • x^\prime - x=583310356263
  • 5+8+3+3+1+0+3+5+6+2+6+3=45
  • 4+5=9