Maison > développement back-end > C++ > Pourquoi le décalage vers la gauche est-il un comportement de nombre négatif non défini en C mais bien défini en C ?

Pourquoi le décalage vers la gauche est-il un comportement de nombre négatif non défini en C mais bien défini en C ?

Barbara Streisand
Libérer: 2024-12-24 07:27:25
original
223 Les gens l'ont consulté

Why is Left Shifting a Negative Number Undefined Behavior in C but Well-Defined in C  ?

Comportement non défini dans l'opération de décalage vers la gauche avec un opérande gauche négatif en C

En C, opération de décalage vers la gauche au niveau du bit (<&lt ;) appelle un comportement non défini lorsque l'opérande de gauche a une valeur négative. Ceci est spécifié dans ISO C99 (6.5.7/4), qui indique que le résultat du décalage vers la gauche d'une valeur négative (type signé) n'est pas défini.</p><p><strong>Raison d'être d'un comportement non défini en C</strong> </p><p>La Norme ne fournit pas de raison explicite pour ce comportement indéfini. Cependant, on peut en déduire que cela est dû à la difficulté de définir un résultat cohérent et prévisible pour les valeurs négatives décalées vers la gauche, en particulier compte tenu du comportement dépendant de l'implémentation des valeurs négatives dans la représentation en complément à deux.</p><p><strong> Comportement bien défini en C </strong></p><p>Contrairement à C, l'opération de décalage vers la gauche en C (ISO C -03 5.8/2) n'invoque pas comportement non défini pour les types signés si le résultat peut être représenté dans le type de résultat. Ce changement a été apporté par le comité ISO C pour garantir la cohérence du comportement de l'opération de décalage à gauche quel que soit le signe de l'opérande.</p><p><strong>Comportement défini par l'implémentation dans l'opération de décalage à droite avec un opérande gauche négatif</strong></p><p>Contrairement à l'opération de décalage à gauche, l'opération de décalage à droite (<code >>>) invoque un comportement défini par l'implémentation lorsque la gauche l'opérande est négatif. Selon la norme, cela est dû au fait que la troncature des bits à gauche dépend de l'implémentation pour les valeurs négatives dans la représentation en complément à deux.

Conclusion

La raison de l'indéfini le comportement en opération de décalage à gauche avec des opérandes négatifs en C et un comportement bien défini en C est principalement dû à la complexité de définir un résultat cohérent pour les valeurs négatives. Le comportement défini par l'implémentation de l'opération de décalage vers la droite sur les opérandes négatifs reflète le fait que la troncature des bits à partir de la gauche dans la représentation en complément à deux est spécifique à l'implémentation.

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