朋友给我发的一个题,是关于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;
}
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.
有高手可以分析一下这是怎么回事吗?