math - signo - representacion de numeros binarios
Agregar binario negativo y positivo? (4)
Agregar el complemento a dos no requiere ningún procesamiento especial cuando los signos de los dos argumentos son opuestos. Simplemente agrégalos como lo harías normalmente en binario, y el signo del resultado es el signo que guardas.
X = 01001001 e Y = 10101010
Si quiero agregarlos, ¿cómo puedo hacer eso? Son "Complemento de dos" ... He intentado muchas cosas, pero no estoy seguro de obtener la respuesta correcta, ya que parece haber diferentes tipos de reglas.
Solo quiero asegurarme de que sea correcto:
1. Agréguelos como son, no convierta el negativo
2. Convierte el número negativo que obtienes y esa es la suma.
f.eks
01001001 + 10101010 = 11110011 => 00001100 => 1101 => -13
¿O?
1. Convertir el negativo
2. Agréguelos y convierta el negativo
f.eks
01001001 + 10101010 => 01001001 + 01010110 => 10011111 => 01100001 => -97
Entonces, básicamente, lo que quiero hacer es tomar: XY y X + Y
¿Puede alguien decirme cómo hacer eso?
Algunos sitios de recursos: student-binary celtickane swarthmore
Y solo para asegurarse de que comprende el complemento de dos, para convertir de un número positivo a uno negativo (o viceversa): invierta cada bit y luego agregue 1 al resultado.
Por ejemplo, su número positivo X = 01001001 pasa a ser 10110101 + 1 = 10110110 como número negativo; su número negativo Y = 10101010 se convierte en 01010101 + 1 = 01010110 como un número positivo.
Para restar Y de X, negar Y y agregar. IE 01001001 + 01010110.
Su confusión podría deberse al ancho de los números involucrados. Para obtener una mejor idea de esto, puede tratar de crear un entero con signo de su entero sin signo.
Si el MSB de su entero sin signo ya es 0, entonces puede leerlo como firmado y obtener el mismo resultado.
Si el MSB es 1, puede agregar un 0 a la izquierda para obtener un número firmado. Debe firmar-ampliar (es decir, agregar 0 si el MSB es 0, agregar 1s si el MSB es 1) todos los números con signo para obtener un número del mismo ancho para que pueda hacer la aritmética "normalmente".
Por ejemplo, usando tus números:
X = 01001001: sin firmar, MSB es 0, no hacer nada.
Y = 10101010: Firmado, no hizo nada con X, aún no hace nada.
Pero si cambiamos el MSB de X a 1:
X = 11001001: Unsigned, MSB is 1, Add a 0 -> 011001001
Y = 10101010: Firmado, extendido X, por lo tanto, extender signo Y -> 110101010
Ahora tiene dos números firmados que puede agregar o restar de la manera que ya sabe.
La belleza del complemento a dos es que a nivel binario es una cuestión de interpretación más que de algoritmo: el hardware para agregar dos números con signo es el mismo que para los números sin signo (ignorando los bits del marcador).
Su primer ejemplo - "simplemente agréguelos" - es exactamente la respuesta correcta. Tus números de ejemplo
- 01001001 = 73
- 10101010 = -86
Entonces, la respuesta correcta es de hecho -13.
Restar es lo mismo, ya que no se requiere un procesamiento especial para los números de complemento de dos: simplemente "restarlos".
Tenga en cuenta que donde las cosas se ponen interesantes es el manejo de bits de desbordamiento / subdesbordamiento. No puede representar el resultado de 73 - (-86) como un número de complemento de dos de 8 bits ...