Un bug dans le décalage ?
Bonjour :coucou:
Voici un petit programme dont le résultat me paraît bizarre (Code::Blocks 13.12, Windows 7)
Code:
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