关于位域的问题,求解答

struct haha
{
	unsigned char a:4,
	unsigned char b:2,
	unsigned char c:1;
	unsigned char d:1;
};
void main()
{
	haha hhh;
	hhh.a=15;
	hhh.b=3;
	hhh.c=1;
	hhh.d=1;
	//printf("%u\t%u\t%u\t%u\n",hhh.a,hhh.b,hhh.c,sizeof(hhh));
	haha *h=&hhh;
	printf("%d\n",*h);
}


输出结果: 255

如果把结构体内的数据稍加修改如下

struct haha
{
	unsigned char a:4,
	unsigned char b:2,
	unsigned char c:2;
};
void main()
{
	haha hhh;
	hhh.a=15;
	hhh.b=3;
	hhh.c=3;
	//printf("%u\t%u\t%u\t%u\n",hhh.a,hhh.b,hhh.c,sizeof(hhh));
	haha *h=&hhh;
	printf("%d\n",*h);
}

输出结果:4344575

为什么会出现如此差异呢?一直苦思冥想

原文地址:https://www.cnblogs.com/wanzaixiaoxin/p/2663940.html