Números en el formato de complemento 2

Hola amigos, quiero compartir este gráfico con Ustedes:

31604399821_904984316f_c.jpg


A mi opinión el gráfico muestra de forma visual el como números enteros son representados de forma binaria por el sistema de "complemento 2"! A la derecho podemos ver como los números enteros, partiendo del número "0" son representados de forma binaria hasta el número mas grande representable con 32 bits, "2^31-1" esto son las permutaciones posibles de los primeros 31 bits! El dígito binario trigésimo-segundo es el que define si se trata de un número positivo o negativo! Podemos ver que el valor binario de este bit cambia de "0" a "1", en representación hexa-decimal esto representa el "8". Es por eso que los números no permiten un valor mayor que el "2^31-1" de signo positivo.

Los valores negativos todos tienen el bit trigésimo-primero con el valor "1".

Lo que no había tenido presente de forma tan clara es el como, usando la formula para la conversión de números entre diferentes "bases"! Los números binarios usan la base "2", los decimales, a los que estamos mas familiarizados, basan en la base "10".

Igual al que sabemos en los números decimales, cada posición de un número, representa otro exponente a la base "10". "11" es 1 a "10^0 y el segundo 1 es 1 a 10^1 yel valor resulta sumando los digítos multiplicados.

Uso los ejemplos del gráfico:

A la derecha abajo vemos la fórmula aplicada en el ejemplo del bit "0" al bit "31", todos tienen el valor 1, por lo tanto el valor decimal resultante es 2^31, pero "-1". Esto lo conocemos del sistema decimal! Los dígitos de una posición pueden asumar valores entre "0" y "9". Si le sumamos 9+1 = (9*10^0) +1 = 10! Vemos como el segundo dígito del número toma el valor de "1" * (10^1) = 10, y "0" * (10^0) = 0

Aunque esto se "sabe", confieso que siempre me "salto" la explicación exacta! Quizá comparto este comportamiento con otros foristas! Aquí el enlace al curso sobre la programación de controladores en "C".

 
Atrás
Arriba