Opération de décalage vers la gauche et comportement non défini dans un contexte d'opérande négatif
En C, les opérations de décalage vers la gauche invoquent un comportement non défini lorsque l'opérande du côté gauche est négatif . Selon ISO C99, le comportement n'est bien défini que pour les opérandes signés non négatifs. Ceci est attribué à l'ambiguïté potentielle dans la représentation des bits libérés.
Différences C
Contrairement à C, C définit le comportement des opérations de décalage à gauche avec des opérandes négatifs. C-03 spécifie que le résultat est la configuration binaire de l'opérande gauche décalée vers la gauche du nombre spécifié de positions, avec les bits libérés remplis à zéro. De plus, si l'opérande de gauche n'est pas signé, le résultat est l'opérande multiplié par 2 élevé à la puissance du nombre de décalages, réduit modulo une certaine constante selon le type.
Raisons du comportement non défini en C
Le comportement indéfini en C découle de la question de savoir comment gérer les bits libérés. Dans le cas d'opérations de décalage vers la gauche, les bits libérés peuvent être remplis avec des uns ou des zéros, mais le comportement doit être cohérent. Par exemple, dans l'expression -1 << 2, si les bits libérés étaient remplis de uns, le résultat serait -4, mais s'ils étaient remplis de zéros, le résultat serait 4026531840.
Complexité de l'opération de décalage à droite
D'un autre côté, les opérations de décalage vers la droite avec des opérandes négatifs ne sont définies que par l'implémentation, et non indéfinies. En effet, les bits libérés sont remplis par le bit qui est décalé. Avec la représentation en complément à deux, le bit de signe est décalé et détermine simplement si le résultat est positif ou négatif. L'implémentation a la flexibilité de décider de remplir les bits libérés avec des zéros ou avec le bit de signe, ce qui rend le comportement défini par 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!