Maison > développement back-end > C++ > La représentation complémentaire de 2 élimine-t-elle le comportement non défini dans le débordement d'entier signé C ?

La représentation complémentaire de 2 élimine-t-elle le comportement non défini dans le débordement d'entier signé C ?

Mary-Kate Olsen
Libérer: 2024-12-23 19:54:09
original
1000 Les gens l'ont consulté

Does 2's Complement Representation Eliminate Undefined Behavior in C   Signed Integer Overflow?

Comportement non défini du dépassement d'entier signé en C

Le dépassement d'entier signé, l'occurrence lorsque la valeur d'un entier signé dépasse sa plage représentable, est bien -connu pour être un comportement indéfini en C . Cependant, la documentation C 11 cstdint introduit une déclaration intrigante : les valeurs négatives dans les types int8_t, int16_t, int32_t et int64_t sont explicitement spécifiées comme étant représentées à l'aide du complément à 2.

Cette spécification soulève la question : l'utilisation de Le complément de 2 pour les valeurs négatives dans ces types modifie le statut de comportement indéfini de débordement ?

La réponse, malheureusement, reste oui. Selon la section 18.4.1 de la norme C 11, l'en-tête définit toutes les fonctions, types et macros de manière identique à la section 7.20 de la norme C. La section 7.20.1.1 de la norme C11 clarifie davantage la définition de intN_t en tant que types entiers signés avec représentation en complément à 2.

Malgré cette spécification de la représentation en complément à 2, la norme C 11 indique sans équivoque dans la section 5/4 que tout une expression qui aboutit à un résultat mathématique indéfini ou qui se situe en dehors de la plage représentable de son type entraînera un résultat indéfini comportement.

Ainsi, l'utilisation du complément à 2 pour les valeurs négatives n'implique pas que l'arithmétique pour ces types adhère au comportement modulo 2^n. Cependant, pour les entiers non signés, la norme spécifie explicitement que les lois de l'arithmétique modulo 2^n s'appliquent, rendant le comportement de débordement mathématiquement défini et dans la plage représentable. Par conséquent, un débordement non signé n'est pas considéré comme un comportement indéfini.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal