TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
23 de Julio de 2014, 00:25:10

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
346101 Mensajes en 38828 Temas por 40388 Usuarios
Último usuario: leo_ap
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  Lenguaje C para microcontroladores PIC (Moderadores: Modulay, pikman, pocher, vszener, Suky)
| | |-+  Suma hexadecimal
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Marcar como favorito Imprimir
Autor Tema: Suma hexadecimal  (Leído 6894 veces)
ghost riderx
PIC10
*
Desconectado Desconectado

Venezuela Venezuela

Mensajes: 2


« : 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.
En línea
gera
Colaborador
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 2126


linux - the future is open


« Respuesta #1 : 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!!
En línea


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

Venezuela Venezuela

Mensajes: 2


« Respuesta #2 : 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!
En línea
TODOPIC
   

 En línea
Páginas: [1] Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.149 segundos con 23 consultas.