2012-03-01 9 views
10

Estoy tomando una organización informática y un curso de idioma ensamblador. La parte escrita de nuestro laboratorio esta semana tiene una pregunta que me ha dejado perplejo. La pregunta dice ...Restando un número binario grande sin firmar de uno más pequeño

Reste los siguientes números binarios sin signo (muestre los bits prestados y de desbordamiento). No se convierta en complemento a dos.

0101 0111 1101 
-1110 1011 0110 
-------------- 

que se dan cuenta de que la respuesta es -1001 0011 1001 pero estoy teniendo un tiempo difícil tratando de encontrar la manera de pedir prestado para llevar a cabo realmente esta resta tomando el número más grande y restarlo de la número más pequeño y mostrar mi trabajo. Toda mi vida al restar un número grande de un número pequeño, he revertido el problema y, en cambio, resté el número más pequeño del número más grande y agregué un signo negativo al frente del resultado. Le pregunté al profesor y él dice que quiere que el problema se resuelva de la manera en que está escrito. No puedo resolver esto restando el número más pequeño del número más grande y negando como lo haría normalmente. No he podido encontrar ningún ejemplo en línea de restar un número binario sin firmar más grande de uno más pequeño.

Realmente apreciaría si alguien pudiera describirme cómo realizar la resta en este escenario.

Actualización: @Alex es correcto. El profesor estaba buscando

0110 1100 0111 (1735) 

Gracias a todos.

+2

¿Estás seguro de que no quiere '0110 1100 0111' con una indicación de algunos bits prestados y un bit de desbordamiento? – Beta

+0

@Beta: No, la respuesta es '-1001 0011 1001' (-2361). Solo está trabajando con números binarios normales, no con una representación de computadora en particular como complemento de 2. –

+0

No estoy seguro si el profesor estaba después de -1001 0011 1001 (-2361) o 0110 1100 0111 (1735), terminé yendo con 1735. Creo que @Beta tiene razón. Volveré a publicar con lo que estaba buscando cuando devuelva el laboratorio. –

Respuesta

7

Lo hace de la misma manera, independientemente de qué número es más grande y cuál es más pequeño.

bb b  bb <- borrows 
0101 0111 1101 (1405) 
-1110 1011 0110 (3766) 
-------------- 
0110 1100 0111 (1735?) 

Ahora, si quieres una diferencia adecuada, es necesario tener en cuenta el desbordamiento ya que el resultado anterior no incluye el bit de signo:

b bb b  bb <- borrows 
0 0101 0111 1101 (1405) 
-0 1110 1011 0110 (3766) 
---------------- 
1 0110 1100 0111 (-2361 signed 2's complement) 

En realidad, la CPU no hace importa qué se resta de qué. Utiliza el mismo algoritmo para la suma/resta entera, además, este algoritmo es el mismo para los enteros con y sin signo. Solo debe interpretar correctamente el resultado y las marcas de acarreo y desbordamiento. Eso es todo.

+1

-1 dijo específicamente que no está trabajando en el complemento 2 –

+0

Gracias Alex. Sospecho que tu mejor ejemplo es lo que busca el profesor. Eso es lo que conseguí al tratar de resolver el problema. Creo que ese pudo haber sido el punto del problema ... para mostrar que la resta no produce el resultado correcto en este escenario. Creo que estaba abordando el problema desde una mentalidad equivocada. –

+0

@ BlueRaja-DannyPflughoeft: Dijo "No se conviertan en complemento de dos". y no convertí nada. –

-1

simplemente reste los dos números binarios tal como están, luego tome el complemento de 2 del resultado. voila!

Cuestiones relacionadas