为了账号安全,请及时绑定邮箱和手机立即绑定

结构声明中的冒号意味着什么,例如:1、:7、:16或:32?

结构声明中的冒号意味着什么,例如:1、:7、:16或:32?

C++
ABOUTYOU 2019-06-24 17:10:05
结构声明中的冒号意味着什么,例如:1、:7、:16或:32?下面的C+代码是什么意思?unsigned char a : 1; unsigned char b : 7;我猜它创建了两个字符a和b,它们都应该有一个字节长,但是我不知道“:1”和“:7”部分做了什么。
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

1和7是限制值范围的位大小。它们通常存在于结构和结合中。例如,在某些系统上(取决于char宽度和包装规则等),代码:

typedef struct {
    unsigned char a : 1;
    unsigned char b : 7;} tOneAndSevenBits;

创建一个8位值,1位用于a和7位b.

通常在C中用于访问“压缩”值,例如包含在8位字符的上半部分的4位ny球:

typedef struct {
    unsigned char leftFour  : 4;
    unsigned char rightFour : 4;} tTwoNybbles;

对于我们当中的语言律师来说,C+11标准的9.6节详细解释了这一点,稍作解释:


位字段

窗体的成员声明符。

     标识符选择属性说明符选择   :   常数表达式

指定位字段;其长度由冒号从位字段名开始。任选属性说明符与被申报的实体有关。位字段属性不是类成员类型的一部分.

这个常数表达式为积分常量表达式,其值大于或等于零。积分常量表达式的值可能大于位字段类型对象表示中的位数;在这种情况下,额外的位被用作填充位,而不参与位字段的值表示。

类对象中位字段的分配是实现定义的.位字段的对齐是实现定义的.位字段被打包到一些可寻址的分配单元中。

注:一些机器上的位域跨分配单元,而另一些机器上没有。在一些机器上,位字段从右到左,在另一些机器上,从左到右.-尾注


查看完整回答
反对 回复 2019-06-24
?
jeck猫

TA贡献1909条经验 获得超7个赞

我相信那应该是比特菲尔德。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 654 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信