Déclaration de variable par calcul incohérent

Bonjour,

Je dois utiliser des dates qui contient de quelque seconde à plusieurs heures en milliseconde
Si je fais les déclaration suivantes

 unsigned long a = 32000;
unsigned long b = 32*1000;
unsigned long d = 33 000;
unsigned long e = 33*1000;

void setup() {
Serial.begin(9600);
Serial.println(a);
Serial.println(b);
}

Quand j’affiche « a » ou « b » j’ai bien la valeur 32000 mais quand j’affiche « d » j’ai 33000 et « e » 4294934760 valeur incohérente.
On dirait que le calcul est géré pont un int alors que j’ai défini un unsigned long
C’est embêtant var je voudrais définir des valeurs par calcul : par exemple quand je veux définir un paramètre de 5 min en milliseconde je voudrais le définir comme cela dans mon code
unsigned long a = 5x60x1000;

ce qui n’est pas possible

Merci pour votre aide

Met ton code entre balises avec la touche </>, car on voit des caractères en italique, c'est bizarre et ça cache peut-être le problème.

Bon, je l'ai fait pour toi...
Si tu changes *1000 en *1000ul, ça devrait aller. Le problème vient que tu ne dis pas que tes valeurs sont en long avant le calcul, donc il les prend pour des int, fait le calcul qui dépasse 32767, donc devient une autre valeur, puis les caste en unsigned long. Mais c'est trop tard, le mal est déjà fait...

:warning:

Post mis dans la mauvaise section, le bar n’est pas la bonne place. ➜ déplacé vers le forum francophone principal

Merci de prendre en compte les recommandations listées dans « Les bonnes pratiques du Forum Francophone”

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.