Question sur le comportement C pour un sous-flux d'entier non signé
J'ai lu dans de nombreux endroits de dépassement d'entier, est bien définie dans C à la différence de la signature de la contrepartie.
Est underflow le même?
Par exemple:
unsigned int x = -1; //Does x == UINT_MAX?
Grâce.
Je ne me souviens pas où, mais j'ai lu quelque part que l'arithmétique sur unsigned les types intégraux est modulaire, donc, si cela était le cas, alors -1 == UINT_MAX mod (UINT_MAX+1).
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
§6.2.5, paragraphe 9:Edit:
Désolé, mauvaise référence, mais le résultat est toujours clouée au sol. La référence correcte est §6.3.1.3 (signés et non signés de conversion d'entier):
Donc oui,
x == UINT_MAX
.-1, exprimée comme un complément de 2 nombre, le montant à 0xFF...F pour combien jamais de nombreuses bits de votre numéro. Dans un nombre non signé de l'espace que de la valeur est la valeur maximale possible (c'est à dire tous les bits sont définis). Donc oui, x == UINT_MAX. Le code suivant émet un "1" sur un C99 stricte compilateur:
On mélange les entiers signés et non signés numéros, ce qui est pas cool.