C:位段~

1、什么是位段?

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

(1)位段的成员必须是int、unsigned或signed int,当然也可以是char类型等等;

(2)位段的成员后边有一个冒号和一个数字。

比如:代码截图

S就是一个位段类型。

那么位段S的大小是多少?

这里可以明确的告诉你是8个字节,下面带你进一步了解

如:如果是int a的话,其实a在内存中是需要4个字节的,但是int a :2,其实是a在内存中只需要2个bit位

一个int占四个字节,而a在内存中占2个bit位,b占5个bit位,c占10个比特位,一共加起来占17个bit位,后面的d占30个比特位,所以不够一个整型的空间,所以系统会浪费第一次开辟下来的剩余的15个bit位,再向内存申请一个整型的空间存放d的30给bit位,同样也会浪费2个bit位的空间,所以总共加起来一共需要2个int型的空间,共8个字节。


2、位段的内存分配

(1)位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型

(2)位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的

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

下面举一个例子

 1,结构体成员变量先进行了初始化0,一个char在内存中占1个字节,也就是8个bit位,首先在内存中申请一个char型的空间,a和b共占了7个bit位,系统会浪费1个bit位,接着开辟一个char型的空间来存放c,c占了5个bit位,系统会浪费3个bit位,然后d又申请了一个char型的空间,d占了4个bit位,系统会浪费4个bit位的空间。所以系统一共开辟了3个char型的空间,也是3个字节。但是在内存中给我们显示的都是以16进制给我显示的,所以现实的如上图所示:绿色位赋值之后的二进制,最终显示的二进制位为,这里我用每四位2进制位放在一起的方法表示,所以连在一起为:

二进制:0110 0010 0000 0011  0000 0100

16进制:0X620304

如图在系统存放方式:


  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值