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.

Exibições: 339

Responder esta

Respostas a este tópico

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço