朋友给我发的一个题,是关于union的。我知道union共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且只能储存其中一个成员变量的值。但这个程序的结果还是让我破感意外。现在也没有琢磨出为什么会是这样。

程序如下:

 

#include <iostream>    
using namespace std;    
   
struct byte    
{    
     unsigned 
int a1:1;    
     
int a2:1;    
     
int a3:1;    
     
int a4:1;    
     
int a5:1;    
     
int a6:1;    
     
int a7:1;    
     
int a8:1;    
};    
   
union b    
{    
    
char c;    
    
struct byte bit;    
}union_a;    
   
int main(int argc, char *argv[])    
{    
    union_a.c 
= 'A';   
    cout 
<<(union_a.bit.a7 + union_a.bit.a1) << endl;         
    
return 0;    
}   

运行结果为0.

感到不解,于是输出了a1-a8的所有值。其中a1=1,a7=-1,其他均为0.

 有高手可以分析一下这是怎么回事吗?

posted on 2010-03-30 18:22  newhi  阅读(1579)  评论(6编辑  收藏  举报