[2021][Julio][Problema 2]

[2021][Julio][Problema 2]

de Leandro Pereira Modzelewski -
Número de respuestas: 5

Buenas, haciendo la parte 2 de este ejercicio me surgió una duda. Cuando escribo un código en alto nivel, siempre puedo asumir que la maquina trabaja en complemento a 2? Porque veo que en la solución hacen en una parte: op_A = - op_A. Y luego también realizan comparaciones de > con operandos en complemento a 2, pero si la representación interna de esos datos fuera otra, no podría pasar los valores a complemento a 2 (cómo hace en la solución) y luego compararlos, no? 

Espero puedan aclararme esta duda,

Saludos,

Leandro.

(Editado por Federico Rivero - envío original jueves, 8 de diciembre de 2022, 17:02)

En respuesta a Leandro Pereira Modzelewski

Re: [2021][Julio][Problema 2]

de Federico Rivero -
Hola Leandro!

Sí, para los tipos de datos entero con signo podés asumir que se guardan en complemento a dos. Hay algo más de información al respecto en este juego de diapositivas:

https://eva.fing.edu.uy/pluginfile.php/488391/mod_resource/content/1/Presentacion-practico2.pdf

Saludos,
Federico
En respuesta a Federico Rivero

Re: [2021][Julio][Problema 2]

de Paula Cianelli Garcia -
Hola!! No pude entrar al link, tengo la misma duda, la solucion hace:

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?
En respuesta a Paula Cianelli Garcia

Re: [2021][Julio][Problema 2]

de Federico Rivero -
Hola Paula!

Lo que pasa es que el operador '-' realiza la negación en complemento a dos, lo cual incluye negar bit a bit y luego sumar 1. Si lo que se desea es realizar la negación bit a bit únicamente, se puede usar el operador ~ ;

EDIT: actualicé el link anterior al recurso de mi mensaje anterior. Ahora funciona (18/12/2023)

Saludos,
Federico
En respuesta a Federico Rivero

Re: [2021][Julio][Problema 2]

de Jose Agustin Bizio Piriz -
Tengo una pregunta relativo a cuando usar unsigned y cuando no. Tengo entendido que lo que importa son los "bits", por ejemplo si trabajamos con una ROM que almacena números en complemento a uno, siempre que yo ponga los bits correctos no importa que el tipo de dato sea unsigned o no? En este caso al devolver complemento a dos como C trabaja con complemento a dos en los tipos signed por defecto es lo mas correcto y fácil usarlo, pero imagino que siempre que yo devuelva los bits correctos y utilice correctamente las operaciones de C es correcto, no?

Otra cosa, en C siempre asumimos int de 32 bits, osea en alto nivel podemos trabajar con ints y longs?
En respuesta a Jose Agustin Bizio Piriz

Re: [2021][Julio][Problema 2]

de Federico Rivero -
Hola José!

Los tipos de datos signed y unsigned indican cómo se interpreta el valor binario almacenado en la variable. En ese sentido, lo que decís es correcto, mientras la variable tenga el valor binario correcto, no importa su tipo cuando lo asignes a la ROM. Igual hay que tener mucho cuidado al operar y efectivamente almacenar el valor binario deseado en la variable.

Con respecto al tamaño de los tipos de datos, siempre que no les demos una arquitectura en particular (como 8086), pueden asumir:

char - 8 bits
short - 16 bits
int - 32 bits
long - 64 bits

También recomiendo leer la siguiente presentación: https://eva.fing.edu.uy/pluginfile.php/488391/mod_resource/content/1/Presentacion-practico2.pdf

Saludos,
Federico