参考:
C语言 | 位域的使用详解
测试代码
#include <stdio.h>
struct pack
{
unsigned int a:2; // 取值范围为:0~3
unsigned int b:4; // 取值范围为:0~15
unsigned int c:6; // 取值范围为:0~63
};
union u1 //u1表示联合体类型名
{
//unsigned int b;
struct pack f;
unsigned int b;
};
int main(void)
{
struct pack pk1;
struct pack pk2;
// 给pk1各成员赋值并打印输出
pk1.a = 1;
pk1.b = 10;
pk1.c = 50;
printf("%d, %d, %d\n", pk1.a, pk1.b, pk1.c);
// 给pk2各成员赋值并打印输出
pk2.a = 5;
pk2.b = 20;
pk2.c = 66;
printf("%d, %d, %d\n", pk2.a, pk2.b, pk2.c);
printf("\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
union u1 mytest;
mytest.f.a=3;
mytest.f.b=15;
mytest.f.c=63;
mytest.b = 3456;
int sum = 3 + 15*4 + 63 * 64;
printf("@@@@@@@ U2 mytest is %d\n",sum);
printf("U2 mytest is %d\n",mytest);
return 0;
}