Considérons le code suivant:
int i = 3 << 65;
Je pense que le résultat est i==0
, mais le résultat réel est i==6
. Après quelques tests, j’ai trouvé cela avec le code suivant:
int i, s; int a = i << s; int b = i << (s & 31);
les valeurs de a
et b
sont toujours les mêmes.
La norme C dit-elle quoi que ce soit à propos du décalage de plus de 32 bits (largeur de type int
) ou s’agit-il d’un comportement non spécifié?
Dans mon brouillon WG12 / N1124 ( pas la norme, mais assez bien pour moi), il y a le bloc suivant dans 6.5.7 Opérateurs de décalage binary :
Si la valeur de l’opérande de droite est négative ou est supérieure ou égale à la largeur de l’opérande de gauche promu, le comportement n’est pas défini.
Donc, non défini . Faites attention.