Bonjour

Voici un petit programme dont le résultat me paraît bizarre (Code::Blocks 13.12, Windows 7)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
    unsigned n = 32 ;
 
    printf("%x, %x", 0xFFFFFFFF>>n, 0xFFFFFFFF>>32);
 
    return 0;
}
Résultat : ffffffff, 0

Si on essaye d'autres valeurs, tout se passe comme si n était calculé modulo 32 avant de faire le décalage.
32 = width of type : il y a d'ailleurs un warning à ce sujet.
Bien sur (!), le problème disparaît si on remplace la ligne 9 par const unsigned n = 32 ;
Une idée de ce qui se passe vraiment ?

Merci d'avance