float et int dans une union
Bonjour,
Bon le programme est en C++ mais la question est valable tant pour le C que pour le C++ :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include<iostream>
using namespace std;
union pack {
unsigned int a[2];
long l;
unsigned char b[8];
float f;
};
int main (){
pack p[10];
pack* pp=p;
cout << "Taille d'un pack : " << sizeof(pack)<<endl;
cout << "Taille d'un float : " << sizeof(float)<<endl;
(*p).l=0;
cout<<(*p).a[0]<<"\t"<<(*p).a[1]<<"\t"<<(*p).l<<endl;
(*p).a[0]=128;
(*p).b[7]=128;
cout<<hex << p<<" : "<<dec<< (*p).a[0]<<"\t\t"<<(*p).a[1]\
<<"\t"<<dec<<(*p).l<<"\t"<<(*p).f<<endl;
(*p).f=-4.128;
cout<<hex << p<<" : "<<dec<< (*p).a[0]<<"\t"<<(*p).a[1]\
<<"\t"<<dec<<(*p).l<<"\t"<<(*p).f<<endl;
(*p).a[0]=0;
cout<<hex << p<<" : "<<dec<< (*p).a[0]<<"\t\t"<<(*p).a[1]\
<<"\t"<<dec<<(*p).l<<"\t"<<(*p).f<<endl;
} |
Voici le résultat du programme :
Code:
1 2 3 4 5 6
| Taille d'un pack : 8
Taille d'un float : 4
0 0 0
0x7fff6ec525d0 : 128 2147483648 -9223372036854775680 1.79366e-43
0x7fff6ec525d0 : 3229882515 2147483648 -9223372033624893293 -4.128
0x7fff6ec525d0 : 0 2147483648 -9223372036854775808 0 |
Ma question :
Pourquoi le premier octet du long l est le char b[7] alors que, apparemment, le premier octet du float f est b[0] ?
On dirait que le float est placé à partir de la fin de l'union...
Merci pour vos éclaircissement