Al agregar números binarios, ¿cómo ignora el desbordamiento?

1

Digamos que utilicé el complemento de 2 para poner -17 en binario y luego lo agregué a +27 , por ejemplo:

  +27    0001 1011b
+ -17    1110 1111b
-------------------
  +10    0000 1010b

Este cálculo aquí debería tener un desbordamiento de 1. ¿A dónde se fue este desbordamiento de 1? ¿Cómo puede usted simplemente ignorarlo cuando cambiaría completamente el cálculo completo?

Cuando agrega números de complemento a 2, ¿significa que siempre tiene que trabajar en un número predefinido de bits, y si es así, por qué?

Además, ¿el complemento de 2 tiene un valor de -0 y un valor de +0 o solo un valor de 0 ?

    
pregunta fred

3 respuestas

4

El transporte y el desbordamiento no son lo mismo.

El MSB de un número de complemento a 2 es el bit de signo. La parte de la que habla es el resultado de la adición de los MSB. Hay un "desbordamiento" solo si los signos de los operandos son idénticos Y el bit de signo del resultado y ese resultado no son idénticos. Si los signos de los operandos son diferentes, entonces no puede haber un desbordamiento, independientemente del estado de la entrega

Pruebe algunos ejemplos para ver cómo funciona.

    
respondido por el Dave Tweed
2

Hay muchas maneras de explicarlo. Aquí hay uno.

El binario con signo de ocho bits puede representar enteros tan bajos como -128 DECIMAL y tan altos como +127 DECIMAL . Entonces, ¿por qué no puede representar el siguiente entero mayor, +128 DECIMAL ?

Respuesta: podría representar +128 DECIMAL . El problema es que la representación sería la misma que la de -128 DECIMAL . Ver:

DECIMAL   BINARY
-128      1000 0000
-127      1000 0001
-126      1000 0010
...
+126      0111 1110
+127      0111 1111
+128      1000 0000
+129      1000 0001
+130      1000 0010
...

Observar:

  • +128 DECIMAL es indistinguible de -128 DECIMAL ;
  • +129 DECIMAL no se puede distinguir de -127 DECIMAL ;
  • +130 DECIMAL no se puede distinguir de -126 DECIMAL ;
  • y así sucesivamente.

Al mantener el bit de acarreo (en realidad no es un bit de desbordamiento; el desbordamiento es otra cosa), estaría afirmando la representación falsa, ¿no es así? Intentalo. Ya lo verás.

No quieres ese bit de acarreo.

NOTAS SOBRE EL DESBORDAMIENTO

Si desea saber qué es el desbordamiento, es lo que sucede cuando intenta (por ejemplo) agregar 96 DECIMAL + 64 DECIMAL . El resultado sale como -32 DECIMAL , lo cual es incorrecto porque el registro de adición se ha desbordado.

Tenga en cuenta que el ejemplo, por cierto, no tiene acarreo.

    
respondido por el thb
0

Recogiendo este bit específico:

  

Cuando agrega números de complemento a 2, ¿significa que siempre tiene que trabajar en un número predefinido de bits, y si es así, por qué?

Sí, necesitas saber la cantidad de bits con los que vas a trabajar, porque eso determina cómo se verá la representación de tu número negativo en el complemento a dos.

Entonces, en tu ejemplo, tienes:

  +27    0001 1011b
+ -17    1110 1111b
-------------------
  +10    0000 1010b

donde habría un "carry" fuera del 8 th -bit. Si tuviéramos que hacer incorrectamente haciendo el mismo cálculo usando más bits, y tomando nota del 8 th -bit carry, obtendríamos la respuesta incorrecta:

  +27    0000 0001 1011b
+ -17    0000 1110 1111b     << WRONG representation of "-17" in 12 bits.
------------------------
 +266    0001 0000 1010b     << WRONG answer in 12 bits.

Sin embargo, si lo hacemos de nuevo, pero usando la representación correcta de 12 bits de -17 , nuevamente obtenemos el resultado correcto, aunque aquí estamos "ignorando" el mantenimiento de los 12 th bit:

  +27    0000 0001 1011b
+ -17    1111 1110 1111b     << Correct representation of "-17" in 12 bits.
------------------------
 + 10    0000 0000 1010b     << Correct answer in 12 bits.

Conceptualmente, puede pensar que la representación "verdadera" de complemento a dos de -17 es una cadena infinita de 1 s, que termina en ...10 1111 . Al realizar cálculos con un número finito de bits, toma la cantidad suficiente de esos 1 s para completar su registro y descartar cualquier "acarreo" que salga de ese tamaño.

    
respondido por el TripeHound

Lea otras preguntas en las etiquetas