Autor Tema: Erro en multiplicación  (Leído 1824 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Erro en multiplicación
« 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

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Erro en multiplicación
« Respuesta #1 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;
}

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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Erro en multiplicación
« Respuesta #2 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);
}
.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Erro en multiplicación
« Respuesta #3 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 ?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Erro en multiplicación
« Respuesta #4 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.
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Erro en multiplicación
« Respuesta #5 en: 23 de Septiembre de 2008, 13:42:44 »
Eso se llama casting  :mrgreen: (tal como mensiono Gera atras)
El papel lo aguanta todo

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Erro en multiplicación
« Respuesta #6 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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Erro en multiplicación
« Respuesta #7 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
.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Erro en multiplicación
« Respuesta #8 en: 23 de Septiembre de 2008, 15:22:53 »
Cryn, me queda muy claro.

reitero mis agradecimientos


 

anything