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.

Qué es el complemento a dos

El complemento a dos es el esquema que usan las computadoras para representar enteros con signo —números que pueden ser positivos o negativos— como simples patrones de bits. Los números positivos se almacenan como binario ordinario, mientras que un número negativo se forma invirtiendo cada bit de su valor absoluto y sumando uno. El bit más significativo (MSB) hace las veces de signo: 1 significa negativo y 0 significa positivo, y el rango representable depende del ancho de bits elegido (8, 16, 32 o 64 bits).

Esta herramienta convierte un entero decimal con signo a su patrón binario en complemento a dos con el ancho de bits que elijas, y también puede convertir en el sentido contrario, de una cadena binaria de vuelta a decimal. Junto al resultado principal muestra la interpretación sin signo de los mismos bits, la notación hexadecimal y una comparación con la representación en signo y magnitud, para que veas de forma concreta cómo un mismo patrón de bits puede significar cosas distintas según cómo se lea.

Cómo usar la calculadora de complemento a dos

  1. Elige un ancho de bits Selecciona 8, 16, 32 o 64 bits según el tipo entero que quieras comprobar.
  2. Elige la dirección de conversión Alterna entre "decimal → binario" y "binario → decimal" según lo que necesites convertir.
  3. Introduce un valor Escribe un entero decimal con signo (por ejemplo, -5) o una cadena binaria (por ejemplo, 11111011).
  4. Lee el resultado de la conversión Aparecen juntos el valor decimal con y sin signo, el patrón en complemento a dos y la notación hexadecimal.
  5. Comprueba el aviso de rango o desbordamiento Introduce un valor fuera de lo que admite el ancho de bits para ver exactamente dónde está el límite del desbordamiento.

Consejos para aprovecharla mejor

  • 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.

Usos prácticos del complemento a dos

Preparar cursos y exámenes de informática

Resuelve a mano los ejercicios de conversión binaria que aparecen en casi todas las asignaturas introductorias de informática y comprueba tus respuestas.

Depurar desbordamientos de enteros en C o sistemas embebidos

Reproduce con el ancho de bits real un valor inesperado de una variable int o uint8_t para localizar exactamente dónde falló.

Entender cómo los registros de la CPU almacenan valores

Cuando un depurador muestra el valor hexadecimal de un registro, comprueba en segundos qué entero con signo representa realmente ese patrón.

Verificar resultados de operaciones a nivel de bits

Antes y después de escribir lógica AND/OR/desplazamiento, confirma a mano que el patrón de bits resultante es el esperado.

Glosario del complemento a dos

Complemento a dos
Una forma de representar números negativos invirtiendo cada bit del valor absoluto y sumando uno. Da al cero un único patrón inequívoco y permite que el mismo circuito sumador se use tanto para sumar como para restar, por lo que casi toda CPU moderna lo usa para enteros con signo.
Bit de signo
El bit más significativo (MSB) de un patrón de bits. En complemento a dos, un valor de 1 indica que el número es negativo y un 0 que es positivo.
Desbordamiento (overflow)
Lo que ocurre cuando un resultado ya no cabe en el ancho de bits disponible. El bit de mayor orden sobrante se descarta, lo que cambia el significado del bit de signo y hace que el valor parezca saltar al extremo opuesto del rango.
Entero con signo frente a sin signo
El mismo patrón de bits puede representar dos valores distintos según se trate el bit de signo como marcador de números negativos (con signo) o simplemente como otro bit de valor (sin signo).
Ancho de bits
El número de bits usados para almacenar un entero. Los anchos habituales son 8, 16, 32 y 64 bits: cuanto más ancho el tipo, mayor el rango de valores que puede representar.
Complemento a uno
Un esquema más antiguo que forma un número negativo invirtiendo simplemente todos los bits del valor positivo, sin sumar 1. Tiene el inconveniente de producir dos patrones distintos para el cero ("+0" y "-0"), un problema que el complemento a dos fue diseñado para eliminar.

Preguntas frecuentes

Tanto la representación de signo y magnitud como la de complemento a uno terminan con dos patrones de bits distintos para el cero ("+0" y "-0"), lo que complica los circuitos de comparación y aritmética. El complemento a dos tiene exactamente un patrón de bits para el cero y, algo igualmente importante, el mismo circuito sumador que realiza la suma también puede realizar la resta. Ambas propiedades permiten a los diseñadores de CPU simplificar la unidad aritmético-lógica, por lo que casi todos los procesadores modernos usan internamente el complemento a dos para los enteros con signo.

De -128 a 127. Como el bit más significativo se reserva para el signo, solo existen 128 patrones distintos en el lado positivo (0 a 127), pero el lado negativo puede representar 128 valores distintos (-1 a -128), ya que el complemento a dos solo tiene un patrón de bits para el cero, dejando un patrón adicional disponible en el lado negativo; de ahí el rango asimétrico.

El complemento a uno forma un número negativo invirtiendo simplemente cada bit del valor positivo. El complemento a dos va un paso más allá y suma 1 después de invertir. Ese paso adicional elimina el "problema de los dos ceros" inherente al complemento a uno (00000000 para "+0" y 11111111 para "-0"), razón por la cual el complemento a dos se convirtió en el estándar.

Como el ancho de bits es fijo, cualquier resultado aritmético que supere el rango representable trunca su bit de mayor orden, lo que cambia el significado del bit de signo. Por ejemplo, sumar 1 al máximo con signo de 8 bits, 127, produce el patrón de bits 10000000, que se interpreta como -128 según las reglas con signo. Superar el límite superior te lleva de vuelta al límite inferior; ese salto contraintuitivo es exactamente lo que es el desbordamiento.

El patrón de bits en sí no cambia, pero al no tratar el bit más significativo como signo, cada bit simplemente aporta su valor posicional habitual. Por ejemplo, el patrón de 8 bits 11111011 equivale a -5 al leerlo con signo, pero a 251 al leerlo sin signo. Esta reinterpretación exacta ocurre en la práctica cada vez que usas un tipo "sin signo", como unsigned int en C, sobre un valor que antes se trataba como con signo.
Tool-kun

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.