TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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
-
supongo q casteando las variables deberia andar.
int cent;
int16 respaldo16; //no te olvides los ;
void convertir()
{
cent=3;
respaldo16= (int16)cent*100;
}
-
tb puedes utilizar la funcion: _mul()
int cent;
int16 respaldo16;
void convertir()
{
cent=3;
respaldo16= _mul(cent,100);
}
-
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 ?
-
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.
-
Eso se llama casting :mrgreen: (tal como mensiono Gera atras)
-
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
-
si, en efecto si no especificas que estas usando variables de 8, 16, etc el carry desbordará como loco
-
Cryn, me queda muy claro.
reitero mis agradecimientos