Le type int est un 16bits sur la plateforme arduino
164 = 0xA4
200 = 0xC8
0xA4 x 0xC8 = 0x8020 // valeur négative
0x8020 / 0xC8 = 0xFF5D
Ce résultat, évalué comme un int donne -163
Ce résultat évalué comme un unsigned int donne 65373
unsigned int = 164 * 200 / 200; qui me donne 65373 et la je comprend plus
Dans ce cas là, seul le résultat est unsigned. Les éléments du calcul ont le type par défaut int.
il faudrait faire ça
unsigned int var = (unsigned int)164 * (unsigned int)200 / (unsigned int)200;
Pour avoir le bon résultat, il faut faire:
unsigned int var = (unsigned int)(164L * 200L / 200L);
Le calcul est réalisé en long donc pas de perte de précision et le résultat est converti dans le bon type
Une variante avec le calcul en flottant:
unsigned int var = (unsigned int)(164.0 * 200.0 / 200.0);