[unsigned] Quelquechose qui m'intrigue avec "if" et "unsigned"
Bonjour,
J'ai croisé un code à tester assez bizarre dont voici l'exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <errno.h>
int main()
int16_t X= 0;
bool Y= 1;
X = -99;
/*commandeGisement verification */
// if ((X > 100)) // Cas A
if ((X > 100u)) //Cas B
{
Y = 0;
}
printf(" l=%i\n cg = %i\n",Y, X);
return 0;
} |
Dans le Cas A (100, actuellement en commentaire), si X est une valeur entre -100 et -1, Y retournera 1
Dans le Cas B (100u, non commenté), si X est une valeur entre -100 et -1, Y retournera 0
Pourtant, 100u et 100 ont la même valeur, donc X restera toujours inférieur à cette valeur.
Est-ce que le compilateur, quand il rencontre le cas de figure B, met X en uint16 et non pas en int16? dans ce cas, pour le cas -99, pourquoi cela ne reste t-il pas à 1?
Quelque sait-il comment cela se déroule?