void setup()
{
Serial.begin(115200);
}
void loop()
{
unsigned long teste = ((2023 * 1000000) + (12 * 10000));
Serial.print ("teste: ");
Serial.println (teste);
Serial.println ("certo: 2023120000");
Serial.println();
delay(5000);
}
O que estou fazendo de errado que o resultado está dando 2022988928?
Alguém pode me dar uma luz.
Desde já agradeço.
Tags:
float dá o mesmo erro.
Incrível que somente com 10000 apresenta isso no meu caso.
Se multiplicar por 100000 já multiplica correto.
Novos testes: (ASSIM FICA CORRETO)
void setup()
{
Serial.begin(115200);
}
void loop()
{
unsigned long aa = (2023 * 1000000);
unsigned long bb = (100000 * 12 / 10);
teste = aa + bb;
Serial.println (aa);
Serial.println (bb);
Serial.print ("teste: ");
Serial.println (teste);
Serial.println ("certo: 2023120000");
Serial.println();
delay(5000);
}
Resultado:
2023000000
120000
teste: 2023120000
certo: 2023120000
Novos testes: (ASSIM FICA COM ERRO)
void setup()
{
Serial.begin(115200);
}
void loop()
{
unsigned long aa = (2023 * 1000000);
unsigned long bb = (10000 * 12);
teste = aa + bb;
Serial.println (aa);
Serial.println (bb);
Serial.print ("teste: ");
Serial.println (teste);
Serial.println ("certo: 2023120000");
Serial.println();
delay(5000);
}
Resultado:
2023000000
4294956224
teste: 2022988928
certo: 2023120000
CF, imprime o valor bb também em hex.
Olha que estranho:
O valor 4294956224 em hexa é 0XFF FF D4 C0 e 120000 em hexa é 0X00 01 D4 C0.
parece erro de conversão do compilador.
Ele parece que está considerando a operação com int.
Testa colocando bb como 120000, e não como multiplicação.
RV
Colocando assim deu certo.
unsigned long bb = ((unsigned long)12 * (unsigned long)10000);
Obrigado.
Se multiplicar por 100000 e depois dividir por 10 dá certo.
Vai entender.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por