Buenas, tengo una consulta respecto a lo planteado de pasar de valor absoluto y signo a complemento a 2, abajo se encuentra lo planteado en la solucion, y arriba la otra solucion planteada por mi, fue en lo unico que diferi al pasar a complemento a 2 , ¿en caso que el numero sea negativo, si negamos el numero y le sumamos 1, en C seguiria cumpliendo lo pedido?
En tu solución no se cumple lo pedido porque el número no estaba en complemento a 2.
Negar bit a bit y luego sumarle uno computa el opuesto del número si el número estaba representado en complemento a 2. Pero el número estaba representado en valor absoluto y signo.
Podés verificarlo vos mismo por ejemplo suponiendo que el número era -1 en valor absoluto y signo, ahi le aplicas las operaciones que hiciste y verificas con qué número quedás en complemento a 2 al final.
La solución del examen lo que hace es pasar el número que era negativo en valor absoluto y signo a su valor absoluto (donde coincide su representación en complemento a 2) y luego calcular el opuesto de ese valor para volver a dejarlo negativo, ahora sí en complemento a 2.
Saludos,
Gustavo
11 if (sg_A == 1){
12 op_A = op_A - 0x80; // como es negativo, le quito el signo
13 op_A = -op_A; // cambio el signo en compl a 2
Pero en ningun momento le suma uno. que entiendo que para hallar el complemento a 2, cuando es negativo se hace el complemento a 1 y se le suma uno.
En este caso es negativo, entonces, en la linea 12 saca el numero del signo y te queda 0(7 bits con el valor absoluto), ahora a esto le hace el complemento, y ta, dice que ahi ya esta en complemento a 2, no estaria en complemento a 1?
El programa en C ejecuta con la semántica vista en el curso. Los números sin signo en representación binaria y los números con signo en representación complemento a 2. El operador - (menos) calcula el opuesto, no el complemento.
Al ejecutar la línea 11 se va a entrar al IF si el número A en valor absoluto y signo es negativo porque el bit más significativo de los números A y B (uno en valor absoluto y signo y otro en complemento A 1) nos dice si el número es negativo en su representación.
Luego en la línea 12 le resta el valor 0x80 al número op_A. Al restar ese número a la representación V.A. y signo de 8 bits de un número negativo estamos quedándonos con el mismo número en valor absoluto pero ahora de signo positivo.
Gustavo