¿Qué es una calculadora de complemento a dos?
El complemento a dos es la forma estándar en que los ordenadores representan los enteros con signo usando un número fijo de bits. Esta calculadora toma un número decimal y un ancho de registro de n bits, y te muestra cómo se almacena ese valor como patrón de bits en complemento a dos, qué valor sin signo representan esos bits y cómo se interpretan como número con signo. Funciona tanto con valores positivos como negativos.
Cómo usarla
Introduce el valor decimal que quieres codificar y el número de bits (lo habitual es 8, 16 o 32). La calculadora ajusta el valor dentro del registro de n bits mediante aritmética modular, muestra la representación binaria y decodifica su interpretación con signo. Los valores negativos se almacenan automáticamente en su forma de complemento a dos.
La fórmula, explicada
Para almacenar un valor \(x\) en \(n\) bits, el patrón almacenado (sin signo) se calcula como $$\text{almacenado} = \left(\left(x \bmod 2^{n}\right) + 2^{n}\right) \bmod 2^{n}.$$ El complemento a dos (la negación) de un valor almacenado es $$\text{complemento} = \left(2^{n} - \text{almacenado}\right) \bmod 2^{n}.$$ Para decodificar el significado con signo de un patrón de \(n\) bits: si el patrón es mayor o igual que \(2^{n-1}\), el valor es \(\text{patrón} - 2^{n}\) (negativo); en caso contrario, es el propio patrón.
Ejemplo resuelto
Codifiquemos -5 en 8 bits. Aquí \(2^{8} = 256\), así que $$\text{almacenado} = \left(\left(-5 \bmod 256\right) + 256\right) \bmod 256 = 251.$$ En binario, \(251 = 11111011\). Al decodificar 251: como \(251 \ge 2^{7}\) (128), el valor con signo es \(251 - 256 = -5\). El complemento a dos de 251 es \(\left(256 - 251\right) \bmod 256 = 5\), que coincide con la magnitud.
Preguntas frecuentes
¿Por qué los números negativos parecen patrones binarios enormes? Los bits iniciales son unos; en la aritmética con signo de \(n\) bits, un 1 al principio indica un número negativo, así que 11111011 es -5, no 251.
¿Qué rango cabe en \(n\) bits? Los valores con signo van de \(-2^{n-1}\) a \(2^{n-1} - 1\). Para 8 bits, eso es de -128 a 127.
¿Y si mi número es demasiado grande? Los valores que se salen del registro «dan la vuelta» (desbordamiento) mediante la operación módulo, exactamente igual que en el hardware real.