Que dit la norme C à propos du décalage de bits sur plus de bits que la largeur de type?

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.