您的位置:首页 > 其它

指定struct成员变量的位数

2012-01-20 22:32 267 查看
在定义结构体的时候,我们在指定成员变量的类型的同时也可以指定成员变量所占的位数,其定义形式为:

struct teststruct
{
类型1 成员1 :成员1所占位数;
类型2 成员2 :成员2所占位数;
类型3 成员3 :成员3所占位数;
......
};


虽然拆分基本成员变量在语法上是得到支持的,但是并不等于我们想怎么分就怎么分,例如下面的拆分显然是不合理的:

struct student
{
unsigned short sex : 1;
unsigned short age : 12;
};
这是因为 1+12 = 13(但是这个结构所占的空间很可能是2个字节而不是13位),不能再组合成一个基本成员,不能组合成 char、int 或任何类型, 拆分的位数应该是合乎逻辑的,应仍然可以组合为基本成员变量 (这个和编译器的字节对齐属性有关)。

测试代码:

#include <stdio.h>

typedef struct teststruct
{
unsigned int val1 : 1;
unsigned int val2 : 2;
unsigned int val3 : 29;
}TS;

int main()
{
TS tmp;

printf("size of TS: %d\n",sizeof(tmp));
printf("size of unsigned int: %d\n",sizeof(unsigned int));

tmp.val1 = 2;
tmp.val2 = 5;
tmp.val3 = 999;

printf("val1:%d,val2:%d,val3:%d\n",tmp.val1,tmp.val2,tmp.val3);

system("pause");
return 0;
}


输出:

size of TS: 4

size of unsigned int: 4

val1:0,val2:1,val3:999

val1只占一位,2的二进制为10,故而val1的值为0,val2同理。

参考:/article/5566683.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: