• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
gddzkw
博客园    首页    新随笔    联系   管理    订阅  订阅
位段

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

    1、位段的成员必须是 int 、unsigned int  、或signed int以及char类型(只要是整型家族就行,一般都是相同的类型出现)

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


 

位段是以位(bit)位单位来定义结构体(或者联合体)中成员变量所占的空间。含有位段的结构体称为位段结构。程序如下:

 

 那么位段的大小是如何计算的:位段a冒号后面的数字,代表所使用内存的大小。位段在空间上是按照4个字节(int)或者1个字节(char)的方式来开辟的。根据所使用的内存放入到开辟的内存中。

位段的内存分配:


  位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段

  位段中最大位的数目不能超过该类型所能表示的最大位数

 

 通过调试:编译器上的内存存储是从低位到高位的方式存储

通过p寻址:0x0085fc78寻找所存的空间

内存中以16进制呈现:22  03  04  00

因此,存的时候是根据二进制进行存储: 0010 0010  0000 0011  0000 0100(位段上面限制了位数)

位段跨平台问题:


    1、int 被当成有符号数还是无符号数是不确定的(第一个图)

 2、位段中最大的数目不能确定,是根据编译器的位数而定

 3、位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义

 4、当一个结构体包含两个位段,第二个位段成员比价大,无法容纳于第一个位段剩余的位时,是舍弃剩余位还是利用,这是不确定的。

  总结:跟结构体相比,位段还是很节省空间的

 

注意:1、int  :4;  无名位段  无名位段不能被访问,但是会占空间。

   2、不能对位段进行取地址操作。

      3、对位段赋值时,不要超过位段所能表示的最大范围,否则造成位置的情况

   4、位段不能出现数组形式

posted on 2022-01-06 14:24  又菜又爱玩丶  阅读(228)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3