c 位域


#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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值