C语言中的冒号问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 11:39:15
如下列程序:
struct mybitfields
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
}test;

void main(void)
{
int i;
test.a=2;
test.b=3;
test.c=0;

i=*((short *)&test);
printf("%d\n",i);
}
请问以上结构中“unsigned short a : 4;”的冒号是什么意思?
谢谢,能再把该程序最终的输出结果解释一下吗?

上面结构中,4+5+7=16位,也就是两个字节,其中a占4位,b占5位,c占7位,这么表示是为了节省空间.可能a的取值情况不多与16种,要是声明为short(2个字节16位)则浪费了许多空间(浪费了12位的空间).

bitfields 位域
把位域和其它类型的结构成员混合使用是合法的
...
float pay;
unsigned lay_off:1;
...
指定占用的空间(按bit) 自己搜索一下
另外,搜索一下填充(padding)的相关信息.(padding解释了bitfields,struct在内存中的推荐格式)

一般来说
...
char a:4;
char b:3;
...
那么a和b总共占用1个字节(8bits)
但是如果是
...
char a:4;
char b:5;
...
的话,它们将占用2个字节(16bits)