Bases de la programmation en C
int et unsigned int font 32 bits. Laquelle des opérations suivantes est un comportement indéfini selon la norme du langage C ?
- AAjouter 1 à une variable unsigned int dont la valeur est le maximum, 4294967295
- BDécaler vers la droite de 1 bit, avec >>, une valeur int négative
- CAjouter 1 à une variable int dont la valeur est le maximum, 2147483647
Afficher la réponse et l'explication
Réponse : C. Ajouter 1 à une variable int dont la valeur est le maximum, 2147483647
Une opération sur des entiers signés dont le résultat sort de la plage représentable, comme 2147483647 + 1 en int, est un comportement indéfini. L'arithmétique des entiers non signés est définie comme revenant au reste de la division par 2³² : 4294967295 + 1 donne 0, et ce n'est pas un comportement indéfini. Le décalage à droite d'une valeur négative est un comportement défini par l'implémentation, qui choisit entre décalage arithmétique et décalage logique ; gcc effectue un décalage arithmétique. En revanche, le décalage à gauche d'une valeur négative est un comportement indéfini.
Continuer : 9 autres questions sur Bases de la programmation en C