Autor Tema: Suma hexadecimal  (Leído 9275 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ghost riderx

  • PIC10
  • *
  • Mensajes: 2
Suma hexadecimal
« en: 10 de Marzo de 2010, 00:31:42 »
Saludos soy nuevo por aca! bueno realmente he visitado infinidades de veces este foro... pero nunca para "postear" algo, ya que todo parece estar acá jajaja.
Esta web me ha ayudado infinidad de veces!!!!
El asunto no es para pedir ayuda( no por el momento).
Se me presentó una situación particularmente estupida en estos días en la que necesitaba sumar dos (2) números hexadecimales.
Cuestión a mi parecer muy sencilla.
y por mas que busqué información al respecto no di con ella.

Les comento:

intentaba sumar por ejemplo 0xFF + 0xAA=0x01A9. Asumiendo que el resultado de la suma será de 2 bytes o 16 bits.

Para lo que:

      int16 suma_hex=0xFF+ 0xAA;  //Asumiendo que el resultado final es una variable de 16 bits
      printf("El resultado es: %LX"suma_hex);
  ->El resultado es: 01A9 (Mostrando correctamente el valor)

Pero al hacer los sumandos, como variables;

      int x,y;
      x=0xFF;
      y=0xAA;
      int16 suma_hex=x+y; //Asumiendo que el resultado final es una variable de 16 bits (2 bytes)
      printf("El resultado es: %LX"suma_hex);
  ->El resultado es: A9 (Mostrando solo el byte menos significativo de la suma y "comiendose" el byte más significativo )

    ¿El error? -> int x,y;
     Estas variables deben ser declaradas también como int16..A pesar que que ellas por si solas no sobrepasen los 8 bits (1 byte).

      int16 x,y;
      x=0xFF;
      y=0xAA;
      int16 suma_hex=x+y; //Asumiendo que el resultado final es una variable de 16 bits (2 bytes)
      printf("El resultado es: %LX"suma_hex);
  ->El resultado es: 01A9 (Mostrando correctamente el valor)

Es decir, si voy realizar una suma hexadecimal donde el resultado es mayor que el valor 0x00FF, debo declarar estas variables como int16

Se que es una estupidez pero esto me me sacó de mis cabales hasta que di con ello, y lo coloco acá por si alguien alguna vez tiene este pequeño pero fastidioso detalle.
Cabe acotar que llevo 2 semanas programando en CCS.
P.D. Si deben eliminar este post por su poca utilidad no hay problema.
Un saludo y les agradezco a todos los usuarios que se encuentran en esta web por su gran labor.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Suma hexadecimal
« Respuesta #1 en: 10 de Marzo de 2010, 00:40:52 »
No es necesario declarar las variables como int16.. solo hay q castearlas en su debido momento:
int x,y;
x=0xFF;
y=0xAA;
int16 suma_hex=(int16)x+(int16)y;

con eso le decis al compilador q para esa suma tiene q considerar las variables como int16, pero siguen ocupando el mismo espacio en la memoria.
saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado ghost riderx

  • PIC10
  • *
  • Mensajes: 2
Re: Suma hexadecimal
« Respuesta #2 en: 10 de Marzo de 2010, 00:43:38 »
No es necesario declarar las variables como int16.. solo hay q castearlas en su debido momento:
int x,y;
x=0xFF;
y=0xAA;
int16 suma_hex=(int16)x+(int16)y;

con eso le decis al compilador q para esa suma tiene q considerar las variables como int16, pero siguen ocupando el mismo espacio en la memoria.
saludos!!
Excelente... pequeños detalles pero muy importantes!