Calculadora de complemento a dos (conversión binaria de enteros con signo)
Convierte un entero decimal con signo a su patrón binario en complemento a dos de 8/16/32/64 bits, o realiza la conversión inversa. Muestra también la interpretación sin signo, la notación hexadecimal y detecta valores fuera de rango.
Consejos
- Un entero con signo de 8 bits va de -128 a 127. Prueba a introducir 127 y luego 128 para ver el límite del desbordamiento en acción: 128 no cabe y provoca el error de rango, justo donde se produciría el salto a -128.
- La fila "decimal sin signo" lee el mismo patrón de bits sin tratar el bit más significativo como signo. Compararla con la fila con signo hace que la diferencia entre ambas interpretaciones sea inmediatamente visible.
- Una entrada binaria debe tener exactamente tantos dígitos como el ancho de bits seleccionado: 8 dígitos para 8 bits, 16 para 16 bits, y así sucesivamente.
- Los cálculos de 64 bits usan BigInt internamente en lugar del tipo Number de JavaScript, por lo que los valores cercanos a 2^63 se convierten sin pérdida de precisión.
- Esta herramienta también es útil para entender el comportamiento de desbordamiento de enteros en lenguajes como C y Java, donde los tipos int (32 bits) y long (64 bits) dan la vuelta exactamente en estos mismos límites.
Preguntas frecuentes
A propósito — Por qué las computadoras usan el complemento a dos
El complemento a dos no es la única forma de representar números negativos en binario. Históricamente también se usaron la representación de signo y magnitud (usando el bit más significativo solo como indicador de signo) y el complemento a uno (invirtiendo simplemente los bits de un número positivo). Ambas comparten un mismo defecto: terminan con dos patrones de bits distintos para el cero, "+0" y "-0", lo que complica la lógica de comparación y el diseño de circuitos. El complemento a dos evita por completo este "problema de los dos ceros": cada patrón de bits corresponde a un único valor entero.
Una ventaja aún mayor del complemento a dos es que el mismo circuito sumador usado para la suma también puede realizar la resta, ya que restar un número equivale a sumar su complemento a dos. La CPU no necesita saber ni preocuparse de si un valor es positivo o negativo; simplemente suma patrones de bits y obtiene el resultado correcto en ambos casos. Esto permite que la unidad aritmético-lógica (ALU) prescinda por completo de un circuito de resta dedicado, razón por la cual prácticamente todas las arquitecturas de CPU modernas adoptaron el complemento a dos para los enteros con signo.
El desbordamiento de enteros es una consecuencia directa de esta representación. Sumar 1 al máximo con signo de 8 bits, 127 (01111111), simplemente hace que el patrón de bits se convierta en 10000000, que interpretado como valor con signo es -128. En C, el desbordamiento de enteros con signo es técnicamente un comportamiento indefinido, lo que significa que las optimizaciones del compilador pueden producir resultados sorprendentes cerca de este límite, así que merece verdadera precaución en código de producción. Java, en cambio, especifica que el desbordamiento da la vuelta silenciosamente, un ejemplo interesante de cuánto pueden diferir las garantías de comportamiento entre lenguajes aunque la representación de bits subyacente sea idéntica.