结构体定义
发布网友
发布时间:2022-04-24 01:50
我来回答
共3个回答
热心网友
时间:2023-07-15 16:10
这个在C语言的语法里叫做 位域。你搜索一下“C语言 位域”就能找到相应的资料。具体看下面的参考资料链接。 不过位域好象也要有数据类型的。感觉这个像单片机程序里的。
3.2 位域
字节操作是C语言十分强大的内设机制。通过位运算符就可以完成位操作。但使用位域(bit-field)也可以访问单个的位,并且增强代码结构,也可能更高效。位域是指定了存储位数的结构或联合中的成员。其定义形式如下:
type name : length;
type指定位域的类型,必须是int、signed或unsigned(C99还允许_BOOL类型); length指定位域的位数。
struct employee
{
float pay;
unsigned lay_off: 1; /* 员工状态 */
unsigned hourly: 1; /* 薪酬方式 */
unsigned dections: 3; /* 受教育情况 */
};
成员的位数是根据成员所需的范围确定的。这里用一个字节就存储了三段信息:员工状态、薪酬方式、手教育情况。如果不用位域,则得要3个字节。
struct employee
{
float pay;
unsigned: 1; /* 无名位段*/
unsigned lay_off: 1; /* 员工状态 */
unsigned hourly: 1; /* 薪酬方式 */
unsigned dections: 3; /* 受教育情况 */
};
无名位段就是无用位,即不存储任何内容。它用来跳过无用位,到达有用位。有时如果无名位段占用4位,在4位字长的计算机上,紧接着的成员lay_off就被存储到另一个存储单元中。如果无名位段的宽度为0,表示使下一个位段从新存储单位的起始位置开始存储,上一个存储单元剩下的位被跳过。
操作位域时,要注意位域是没有地址的,所以对它不能使用取地址运算符&。另外,使用位域,虽然节省了内存,但编译器将产生执行速度慢的机器语言代码。
参考资料:http://blog.csdn.net/hejianhua/article/details/3638531
热心网友
时间:2023-07-15 16:11
成员类型都是位类型追问如何看出是位类型?后面数字代表什么?
追答成员后面使用了:
后面的数字表示这个成员占了几位位
热心网友
时间:2023-07-15 16:11
这样的定义合法吗?
好像不合法吧..