#include<stdio.h>
struct Date1{
unsigned int year;//4个字节
unsigned int month;
unsigned int day;
unsigned int hour;
unsigned int minute;
unsigned int second;
};
struct Date2{
unsigned int year ;
unsigned int month: 4;//4bit
unsigned int day: 5;
unsigned int : 0;//空域,下面的从下一单元开始存放
unsigned int hour: 5;
unsigned int minute: 6;
unsigned int second: 6;
};
struct Date3{
unsigned int year ;
unsigned int month: 4;
unsigned int day: 5;
unsigned int : 0;//空域,下面的从下一单元开始存放
unsigned int hour: 5;
unsigned int minute: 6;
unsigned int second: 30;//注意,此处不能超过一个int的位数大小(本机为32bit)
};
int main(){
printf("%d\n",sizeof(struct Date1));
printf("%d\n",sizeof(struct Date2));
printf("%d\n",sizeof(struct Date3));
return 0;
}
The result is :
24
12
16
Process returned 0 (0x0) execution time : 0.196 s
Press any key to continue.
位域的讲解可以参考
http://hi.baidu.com/xiao1dian/item/7cfa8e0e9d0e51cc905718ed
http://tonybai.com/2013/05/21/talk-about-bitfield-in-c-again/
例2:
#include <stdio.h>
//#pragma pack(push,1)
//#pragma pack(push,2)
#pragma pack(push,4)
struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
};
#pragma pop()
int main()
{
printf("%d",sizeof(A));
return 0;
}
the result is
6、6、8
参考http://bbs.csdn.net/topics/330138880