TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micronet3 en 02 de Mayo de 2018, 16:33:22

Título: sumar int16 y int 8
Publicado por: micronet3 en 02 de Mayo de 2018, 16:33:22
saludos, tengo una una duda

tengo dos variables tal como se muestra en la siguiente

int16 j=1000;
int8 i=10;
int8 k;

k=i+(int8)j;

es posible la operacion anterior?
gracias
 
Título: Re:sumar int16 y int 8
Publicado por: Eduardo2 en 02 de Mayo de 2018, 16:55:19

La operación es posible, otra cosa es que el resultado sea el que esperás.

   k == i + (int8)j     

Ahí se suma el 1er byte de j (= 232), por lo tanto la evaluación sería:

   k == 10 + 232
Título: Re:sumar int16 y int 8
Publicado por: micronet3 en 02 de Mayo de 2018, 17:10:48
a ok entonces el segundo byte de j se pierde

gracias
Título: Re:sumar int16 y int 8
Publicado por: MGLSOFT en 02 de Mayo de 2018, 17:36:53
Deberías hacer al revés:

int16 j=1000;
int8 i=10;
int16 k;

k=(int16)i+j;

Asi no pierdes nada.
Título: Re:sumar int16 y int 8
Publicado por: electroipod en 03 de Mayo de 2018, 13:50:57
Te voy a recomendar al mejor profesor para resolver esto, es el compilador, el compilador te dirá si esta bien o mal.
Título: Re:sumar int16 y int 8
Publicado por: micronet3 en 07 de Mayo de 2018, 12:14:59
Te voy a recomendar al mejor profesor para resolver esto, es el compilador, el compilador te dirá si esta bien o mal.

creo que no siempre!
Título: Re:sumar int16 y int 8
Publicado por: Picuino en 07 de Mayo de 2018, 19:34:57
saludos, tengo una una duda

tengo dos variables tal como se muestra en la siguiente

int16 j=1000;
int8 i=10;
int8 k;

k=i+(int8)j;

es posible la operacion anterior?

El C es famoso porque te permite dispararte en el pie. Casi todo está permitido. Por ejemplo borrar todo el espacio de memoria de programa:
   for(int i=0; i; i++) *((int *)i)=0;


Lo que estás haciendo es:
1000 = 3*256 + 232
por lo que (int8)j  es igual a 232
k = 10 + 232 = 242
Título: Re:sumar int16 y int 8
Publicado por: colotron en 09 de Mayo de 2018, 08:57:34
Buscar sobre "integer promotion C", la idea es que se busca realizar la operación en el tipo de datos de menor tamaño que contenga a los 2 operandos, y luego al escribir el resultado se convierte al tipo de la variable del lado izquierdo del =