经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C 位段使用
来源:cnblogs  作者:痱子?  时间:2021/4/19 8:59:24  对本文有异议

什么是位段

段位的声明的结构类似,有两个不同:

1.位段的成员必须是int,unsigned int 或者signed int只要是整形就可以.

2.位段的成员名后边有一个冒号和一个数字

例如

  1. struct S
  2. {
  3. int a : 2;
  4. int b : 5;
  5. int c : 10;
  6. int d : 30;
  7. };
  8. int main()
  9. {
  10. struct S s;
  11. printf("%d\n", sizeof(s));
  12. }

这里怎么计算大小的呢?

我们知道一个int是站32个比特位 这里的2就是比特位

2+5+10=17 他们相加都没有大于32 可以在一个int类型中 4个字节 但是在加30就超过32比特位了不能存储了就需要重新申请一个字节

这里一共申请了2个 就是8个字节长度

看一下他们的内存如何展示的 例如

  1. struct S
  2. {
  3. char a : 3;
  4. char b : 4;
  5. char c : 5;
  6. char d : 4;
  7. };
  8. int main()
  9. {
  10. struct S s = {0};
  11. s.a = 10;
  12. s.b = 20;
  13. s.c = 3;
  14. s.d = 4;
  15. return 0;
  16. }

 

先存a  一个字节是8个比特位  这里a是3 可以使用3个比特位   记住是高位低存

0000 1010  用到了4个比特位但是只能存3个 就是  0000 0010

 在去存b  b是4个比特位 大小是20 接着a继续存

1010 0010 用了5个比特位 但只能存 4个就是  0010 0010

这里一共用了7个比特位了 最后一个比特位不够c存储 要重新申请一个字节

0000 0000

c是5个比特位存3  

0000 0011

还剩3个不够d存了 重新申请

d是4个比特位存4

0000 0100

拼接起来16进制就是

     2      2        0      3      0       4

 0010 0010  0000 0011 0000 0100

   b        a                c                 d

 

22 03 04  就是他的内存值

 

char 段位最大8  int 最大是32

 

原文链接:http://www.cnblogs.com/feizianquan/p/14660859.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号