用位段做了个实验,在此写为文章,以作以后复习使用。
typedef struct
{
unsigned a1 : 1;
unsigned a2 : 1;
unsigned a3 : 1;
unsigned a4 : 1;
unsigned a5 : 1;
unsigned a6 : 1;
unsigned a7 : 1;
unsigned a8 : 1;
unsigned a9 : 1;
unsigned a10 : 1;
unsigned a11 : 1;
unsigned a12 : 1;
unsigned a13 : 1;
unsigned a14 : 1;
unsigned a15 : 1;
unsigned a16 : 1;
unsigned a17 : 1;
unsigned a18 : 1;
unsigned a19 : 1;
unsigned a20 : 1;
unsigned a21 : 1;
unsigned a22 : 1;
unsigned a23 : 1;
unsigned a24 : 1;
unsigned a25 : 1;
unsigned a26 : 1;
unsigned a27 : 1;
unsigned a28 : 1;
unsigned a29 : 1;
unsigned a30 : 1;
unsigned a31 : 1;
unsigned a32 : 1;
}BIT;
这是一个有32个成员的结构体,每个成员占1bit.按照内存对齐的算法,应该正正好对应一个int型。
int main(int,char**)
{
BIT b;
b.a1 = 1;//此处赋值奇数都可以,因为只取最后一个bit 1
b.a2 = 0;
b.a3 = 0;
b.a4 = 0;
b.a5 = 0;
b.a6 = 0;
b.a7 = 0;
b.a8 = 0;
b.a9 = 0;
b.a10 = 0;
b.a11 = 0;
b.a12 = 0;
b.a13 = 0;
b.a14 = 0;
b.a15 = 0;
b.a16 = 0;
b.a17 = 0;
b.a18 = 0;
b.a19 = 0;
b.a20 = 0;
b.a21 = 0;
b.a22 = 0;
b.a23 = 0;
b.a24 = 0;
b.a25 = 0;
b.a26 = 0;
b.a27 = 0;
b.a28 = 0;
b.a29 = 0;
b.a30 = 0;
b.a31 = 0;
b.a32 = 0;
printf("%d\n",b);
system("pause");
return 0;
}
显示结构是 1 。也可以说明我的机器是小端字节序的。