结构体与位段

2023-12-14 04:58:23

1.位段的声明与结构体是类似的,但位段的成员必须是int,unsigned int或者sighed int,但在c99环境中无此限制

2.位段的成员后面有一个冒号和一个数字,数字代表成员占有的比特位

struct A
{
  int_a:3;
  unsigned int_b:4;
  signed int_c:5;


};
//位段类型演示

3.位段的大小:字节加起来再换算为int类型,并向上取整比如上面占了12个比特位,一个int32个比特位,根据向上取整此位段占一个int的空间,所以sizeof(A)=4,部分可以使用char类型

4.位段的作用:节省空间,一般在变量的值在某一特定范围内使用,比如a只有0和1两个取值,那么给一个比特位就够了

5,位段有很多不确定因素,具有不可移植性,不跨平台(内存从左向右使用还是从右向左使用,数据大于空间要留下哪些位)(在剩余字节不够下一个成员的时候,会新开辟一个空间,但剩下的是否要被使用不确定)(位段成员是否有符号位不确定)(机器位数不确定)

6.判断位段运用方法,先假设从左到右和从右到左存储,再假设剩余空间是否浪费,再监视内存取地址观察(地址运算16进制,4比特位一读)

7.应用:IP数据报

8.注意事项:不能对位段成员取地址,所以不能用scanf,必须通过中间变量赋值,和const void*与void*一样

文章来源:https://blog.csdn.net/whcwhc111111/article/details/134984222
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。