Maison >développement back-end >C++ >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 ?
Comportement non défini : décalage vers la gauche avec opérande gauche négatif
Selon la norme ISO C99, l'opération de décalage vers la gauche au niveau du bit (<< ) appelle un comportement non défini lorsque l'opérande de gauche a une valeur négative. En effet, la norme exige que si l'opérande de gauche a un type signé et une valeur non négative, le résultat est le produit de l'opérande de gauche et 2 à la puissance du montant du décalage, réduit modulo un de plus que la valeur maximale représentable. dans le type de résultat. Sinon, le comportement n'est pas défini.
Comportement bien défini en C
Contrairement au C, C garantit un comportement bien défini pour les opérations de décalage à gauche avec des opérandes gauches négatifs . La norme ISO C -03 précise que le résultat est l'opérande gauche multiplié par 2 élevé à la puissance du montant du décalage, réduit modulo la valeur maximale représentable plus un. Ce comportement bien défini permet d'obtenir des résultats prévisibles même en cas de changement de valeurs négatives.
Justification du comportement bien défini de C
La décision du comité ISO C de définir le comportement pour les décalages à gauche avec des opérandes gauches négatifs était probablement motivé par le désir d'obtenir des résultats prévisibles dans divers scénarios, y compris la manipulation de bits et les nombres entiers. arithmétique.
Décalage vers la droite défini par l'implémentation avec un opérande gauche négatif
L'opération de décalage vers la droite au niveau du bit (>>) avec un opérande gauche négatif est définie par l'implémentation. Cela signifie que le comportement n'est pas spécifié par la norme et est laissé à la discrétion de l'implémenteur du compilateur. Cela dépend généralement de la plate-forme cible et de l'implémentation spécifique du compilateur.
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!