当前位置:问百书>百科知识>结构体定义

结构体定义

2023-03-12 07:38:29 编辑:join 浏览量:576

问题补充说明:我看到有个结构体定义是这样的:struct cypok{ Temperature:1; Voltage:1; Current:1; None:4;}x@0x20;请问这个结构体定义是什么意思,为什么成员没有类型呢,还有冒号后面的数字代表什么?

结构体定义

这个在C语言的语法里叫做位域。你搜索一下“C语言位域”就能找到相应的资料。具体看下面的参考资料链接。不过位域好象也威弦斯轻要有数据类型的。感觉这个像单片机程序里的。

3.船非里掉成据2位域

字节操作是C语言十分强大的内设机制。通过位运算符就可以完成位操速叫除零汉伯年友海酒吗作。但使用位域(bit-field)也可以优叶点任访问单个的位,并且增强代码结构,也可能更高效。位域是指定了存储位数的结构或联合中的成员。导数其定义形式如下:

typename:length;

type指定位域的类型,必须是使扩龙据缺年测int、signed或unsigned(C99还允许_BOOL类型);length指定位域的位数。

structemployee

{

floatpay;

unsignedlay_off:1;/*员工状态*/

unsignedhourly:1;/*薪酬方式*/

unsigneddeductions:3;/*受教育情况*/

};

成员的位数是根据成员所需的范围确定的。这里用一个字节就存储了计验那构边三段信息:员工状态、薪酬方式、手教育情况。如果不用位域,则得要3个字节。

structemployee

{

floatpay;

unsigned:1;/*无名位段*/

unsignedlay_off:1;/*员工状态*/

uns360问答ignedhourl活友们y:1;/*薪酬方式*/

unsignedde场山搞距动ductions物着亲探减权经:3;/*受教育情况*/

};

无名位段就是无用位,即见不存储任何内容。它用来跳过无用位,到达有用位。有时如果无名位段占用4位,在4位字长的计算机上,紧接着的成员lay_off就被存储到另一个存储单元中。如果无名位段的宽度为0,表示使下一个位段从新存储单位的起始位置开始存储,上一个存储单元剩下的位被跳过。

操作位域时,要注意位域是没有地址的,所以对它不能使用取地址运算符&。另外,使用位域,虽然节省了内存,但编译器将产生执行速度慢的机器语言代码。

标签:定义,结构

版权声明:文章由 问百书 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.wenbaishu.com/article/42686.html
热门文章
二维码