[2021][Simulacro][Problema 4]

[2021][Simulacro][Problema 4]

de Javier Gayoso Mondino -
Número de respuestas: 3

Estimados, alguien me puede decir si esta bien ya que es bastante diferente a la solución

Otra cosa, me generan dudas la manipulación de char como int y el dimensionamiento en cada caso. 

Muchas gracias!!!!

short Array ROM[1<<18 ];//es necesario darle tamaño o inicializar? en la solución no esta

void cargar(){

int result = 0

char n = 0

char z = 0

int indice = 0

for (char op= 0, op++, op<3 ){//4 operaciones

             for (char a= -128 , a++, a<128 ){//como el operador es de 2^8 me queda 2^7 para                                                                           //cada lado

                          unsigned char b_shift =0

                          for (char b= -128 , b++, b<128 ){

                                   b_shift = b;

                                    if (op==0)//suma

                                          result = a+b

                                     if (op==1)//resta

                                          result = a-b;

                                     if (op==2)//sizq

                                             result = a<<b;

                                    if (op==3)//sder

                                             result = a<<b;

                                   if result <0

                                             N=1;

                                     else N=0;

                                  if result == 0

                                             z=1;

                                     else z=0;

                         ROM [indice] = z<< 9 |n<< 8 |result;

                          indice++;

                          }//forb

                  }//fora

            }//for

//forop

}//





En respuesta a Javier Gayoso Mondino

Re: Solucion ejercicio 4 simulacro

de Federico Rivero -
Estimado:

short Array ROM[1<<18 ];//es necesario darle tamaño o inicializar? en la solución no esta

Sí, es algo que nos comimos en la solución. Debería estar.

Luego la idea está bien, tiene unos problemas con definir resultado como int. El cálculo de las banderas N y Z te pueden dar mal. Las sumas que den overflow como por ejemplo 10000000 + 10000000 = 1 000 000 00, deberían dar Z = 1 y en tu caso van a dar Z = 0. Problemas similares pueden ocurrir con la bandera N.

Adicionalmente, al calcular el resultado habría que usar una máscara en el resultado:                          

ROM [indice] = z<< 9 |n<< 8 |(result & 0xFF);

Saludos,
Federico
En respuesta a Federico Rivero

Re: Solucion ejercicio 4 simulacro

de Javier Gayoso Mondino -
Muchas gracias!!
otra consulta, con respecto a esto mismo, el la solución también hay un redimensionamiento asumido, en la parte donde dice "char b = i;" //( i type int)
también debería haber tenido una mascara (&00FF)? o en estos casos no aplica?
gracias!!!!
En respuesta a Javier Gayoso Mondino

Re: Solucion ejercicio 4 simulacro

de Federico Rivero -
El problema que te marqué no es el redimensionamiento, es el 'or' bit a bit que se realiza entre z, n y result. En el caso que me señalás la instrucción esa simplemente le asigna los bits menos significativos de i a b, los más significativos no intervienen en la instrucción.

Saludos,
Federico