C结构体之位域(位段)结构体大小

来源:互联网 发布:美工主要做什么 编辑:程序博客网 时间:2024/06/08 04:20

struct Cstruct
{
int x:1;
int y:14;

int Z:32;

int W:1;
};

ret=sizeof(struct Cstruct); =12 //硬是没明白 


1. 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:

struct bs{    unsigned a:4    unsigned b:5 /*从下一单元开始存放*/    unsigned c:4}

2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度

3. 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。例如:

复制代码
struct k{    int a:1    int :2 /*无位域名,该2位不能使用*/    int b:3    int c:2}; 

struct Cstruct{int x:1;int y:14;int W:1;int Z:32;};

ret=sizeof(struct Cstruct); =8 //明白 

32 bit default 4byte 对齐

这文章写得很好:可以去看看!

http://www.cnblogs.com/bigrabbit/archive/2012/09/20/2695543.html