TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Diego E. en 23 de Septiembre de 2008, 09:34:46

Título: Erro en multiplicación
Publicado por: Diego E. en 23 de Septiembre de 2008, 09:34:46
Hola grupo, en esta operacion aritmética no logro comprender que sucede, anexo apartes del código

int cent
int16 respaldo16
//////////////////////////////////
void convertir()
{
cent=3;
respaldo16=(cent*100)
}

El resultado que aparece en respaldo16 es igual a 44 (deberia ser 300)

void convertir()
{
respaldo16=(3*100)
}

El resultado que aparece en respaldo16 es igual a 300 (es correcto)

gracias
Título: Re: Erro en multiplicación
Publicado por: gera en 23 de Septiembre de 2008, 09:50:58
supongo q casteando las variables deberia andar.

Código: [Seleccionar]
int cent;
int16 respaldo16; //no te olvides los ;

void convertir()
{
    cent=3;
    respaldo16= (int16)cent*100;
}
Título: Re: Erro en multiplicación
Publicado por: Cryn en 23 de Septiembre de 2008, 12:21:36
tb puedes utilizar la funcion: _mul()

int cent;
int16 respaldo16;

void convertir()
{
    cent=3;
    respaldo16= _mul(cent,100);
}
Título: Re: Erro en multiplicación
Publicado por: Diego E. en 23 de Septiembre de 2008, 12:42:40
Cryn, Gera, gracias por su pronta respuesta, probé de ambas formas y sólo me funciona anteponiendo el comando (int), de esta forma queda resuelta mi situación; pero me podrían explicar porque de la forma respaldo16=cent*100 no funciona ?
Título: Re: Erro en multiplicación
Publicado por: Cryn en 23 de Septiembre de 2008, 12:59:56
porque cent es una variable de 8 bits, y al multiplicarlo con "otra variable de 8 bits" el resultado internamente desbordará, porque solo se esta usando variables de 8 bits, y por eso se debe especificar el tipo de variables, o hacer una multiplicación más efectiva.

en otras palabras, no es bueno mezclar variables de 8 con 16 32 bits así por así, hay que hacer algo especial, para que se identifiquen entre si.
Título: Re: Erro en multiplicación
Publicado por: MLO__ en 23 de Septiembre de 2008, 13:42:44
Eso se llama casting  :mrgreen: (tal como mensiono Gera atras)
Título: Re: Erro en multiplicación
Publicado por: Diego E. en 23 de Septiembre de 2008, 13:51:17
Cryn, o sea que cuando se estime que un resultado desbordará posiblemente el carry se debe poner esta sentencia ?, me corriges, porque es muy puede ser muy normal trabajar con variables de 8 y de 16 bit.

gracias
Título: Re: Erro en multiplicación
Publicado por: Cryn en 23 de Septiembre de 2008, 14:44:43
si, en efecto si no especificas que estas usando variables de 8, 16, etc el carry desbordará como loco
Título: Re: Erro en multiplicación
Publicado por: Diego E. en 23 de Septiembre de 2008, 15:22:53
Cryn, me queda muy claro.

reitero mis agradecimientos