[2021][Julio][Problema 2]

[2021][Julio][Problema 2]

de Juan Martin Nuñez Pena -
Número de respuestas: 1

Buenas.

Tengo un par de dudas sobre algunas cosas de como cargar la rom ya que lo hice distinto que en la solucion.

1- Para conseguir B hice B = i % 256. Esto me deja en B los 8 bits menos significativos de i?

2- Para conseguir A hice A = ((i >> 8) % 256), el %256 no es necesario ya que A es un char entonces toma los 8 bits menos significativos de i?

3- Para conseguir el signo de A y B en lugar de cargarlos en una variable, hice un if((A & 0x80) = 0) el cual entraria en el caso de que A tuviese signo positivo, y sustituyendo por B, en el caso de que B no necesite ser tomado su complemento. Esto es correcto?

4- Conectado con la pregunta 3, para conseguir A y B con sus valores reales hice la asignacion A = (-(A%128)) en el caso de que su signo fuese negativo, tomando de esa forma los primeros 7 bits. Eso es correcto? Por otro lado, en el caso que B tenga el bit mas significativo en 1 hice la asginacion B = ~B, esto se puede hacer?

Gracias

En respuesta a Juan Martin Nuñez Pena

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

de Federico Rivero -
Hola Juan Martín!

Contesto entrelíneas.

1- Para conseguir B hice B = i % 256. Esto me deja en B los 8 bits menos significativos de i?
Sí, es equivalente a la solución.

2- Para conseguir A hice A = ((i >> 8) % 256), el %256 no es necesario ya que A es un char entonces toma los 8 bits menos significativos de i?
Correcto.

3- Para conseguir el signo de A y B en lugar de cargarlos en una variable, hice un if((A & 0x80) = 0) el cual entraria en el caso de que A tuviese signo positivo, y sustituyendo por B, en el caso de que B no necesite ser tomado su complemento. Esto es correcto?
Sí, también es equivalente a lo que está en la solución.

4- Conectado con la pregunta 3, para conseguir A y B con sus valores reales hice la asignacion A = (-(A%128)) en el caso de que su signo fuese negativo, tomando de esa forma los primeros 7 bits. Eso es correcto? Por otro lado, en el caso que B tenga el bit mas significativo en 1 hice la asginacion B = ~B, esto se puede hacer?
El manejo de A es correcto.
El manejo de B no es correcto, porque le estás cambiando el signo y no hay que hacer eso. Se cambia el signo en A porque al remover el signo del primer bit, el número resultante es positivo y el que querríamos comparar es negativo, pero en el caso de B, querés quedarte con el número negativo. Algo análogo a lo que hay en la solucíon sería: B = - ( ~B), con el primer ~ se obtiene el número positivo (cuya representación es equivalente en complemento a 1 y complemento a 2), y luego con el - , se vuelve a obtener el número negativo, pero esta vez en complemento a 2 (ya que el operando '-' se implementa en complemento a 2).

Avisame si queda alguna duda, por favor!

Saludos,
Federico