Arithmétique des ordinateurs

En langage C, quel est le résultat de la soustraction de 1 à 0 pour un entier non signé de 32 bits (unsigned int) ?

  1. A−1
  2. B4294967295
  3. CIl reste égal à 0
Afficher la réponse et l'explication

Réponse : B. 4294967295

Les entiers non signés n'ont pas de valeurs négatives, et le langage C prévoit que le résultat est pris modulo 2³² (rebouclage). 0 − 1 donne 2³² − 1 = 4294967295, dont tous les bits sont à 1. Ainsi, une boucle « décrémenter i jusqu'à 0 » écrite avec une variable non signée et la condition i >= 0 ne se termine jamais, la condition étant toujours vraie. −1 n'est pas représentable en non signé, et le résultat ne reste pas bloqué à 0 (pas de saturation).

S'entraîner sur ce thème Retour au thème

Autres questions sur Arithmétique des ordinateurs

  1. Pour l'addition de deux entiers non signés, quelle méthode détermine correctement que le résultat a dépassé la plage représentable (débordement) ?
  2. Quelle description de l'écart entre valeurs représentables voisines en virgule flottante est correcte ?
  3. En simple précision IEEE 754, jusqu'à quelle limite tous les entiers à partir de 0 sont-ils représentables exactement ?
  4. Pour les calculs monétaires, quelle est la principale raison de travailler souvent avec des entiers dont l'unité est la plus petite unité monétaire (1 yen ou 1 cent) plutôt qu'en virgule flottante binaire ?
  5. Dans l'entraînement en précision mixte en IA, pourquoi conserve-t-on la valeur originale des poids (poids maîtres) en FP32 tout en effectuant la plupart des calculs en FP16 ou bfloat16 ?