Maison > développement back-end > C++ > Le dépassement d'entier signé en C a-t-il toujours un comportement indéfini ?

Le dépassement d'entier signé en C a-t-il toujours un comportement indéfini ?

Linda Hamilton
Libérer: 2024-12-25 01:18:25
original
741 Les gens l'ont consulté

Is Signed Integer Overflow in C   Still Undefined Behavior?

Dépassement d'entier signé en C : comportement toujours non défini

Comme souligné dans la documentation C 11 cstdint, les types d'entiers signés tels que int8_t, int16_t , int32_t et int64_t utilisent le complément à 2 pour les valeurs négatives valeurs. Cela a soulevé la question : cela implique-t-il que le débordement dans ces types n'est plus considéré comme un comportement indéfini ?

Non, le débordement de ces types reste un comportement indéfini en C .

Selon le paragraphe 5/4 de la norme C 11, toute expression dont le résultat n'est pas mathématiquement défini ou se situe en dehors de la plage représentable du type entraîne un résultat indéfini. comportement.

Bien que int8_t, int16_t, int32_t et int64_t utilisent le complément à 2, cela n'implique pas que l'arithmétique modulo 2^n est appliquée. La norme déclare explicitement que :

"Le résultat d'une opération arithmétique non signée est toujours 'mathématiquement défini', et le résultat est toujours dans la plage représentable ; par conséquent, 5/4 ne s'applique pas."

Par conséquent, l'arithmétique non signée suit les lois de l'arithmétique modulo 2^n, et le débordement n'est pas un comportement indéfini. Cependant, pour l'arithmétique signée, le débordement reste un comportement indéfini, quelle que soit la représentation sous-jacente.

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!

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