bonjours;
j'ai besoin d'un registre 48 bit, mais accessible par 6 bits, et en entier.

je l'ai défini comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
typedef struct reg48 {
    unsigned int   b7:6 ,b6:6 ,b5:6 ,b4:6, b3:6, b2:6, b1:6, b0:6;
} reg48; 
 
typedef union reg48_6 {
    unsigned __int64 reg;// pour un accés à toute la valeurs
    reg48 b;  //pour traiter chaque 6 bits à part
}reg48_6;
puis j'utilise cela:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
reg48_6  s;
int i;
 
    s.reg=0;
    s.b.b0=1;
    s.b.b1=2;
    s.b.b2=3;
    s.b.b3=4;
    s.b.b4=5;
    s.b.b5=6;
    s.b.b6=7;
    s.b.b7=8;
for(i=0;i<8;i++)
    {   cout<<hex<<s.b.b0<<"\n";
         s.reg=s.reg<<6;
        cout<<"\n";
    }
normalement je devrais avoir 1,2,3,...8
MAIS il m'affiche: 1,2,3,1,1,11,21,32............je ne comprend pas pourquoi.?
merci de me dire comment je fais pour retrouver les s.b.bi dans le s.b.b0 quand je fais des decalage.