c语言 段位,C语言 段位

C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或“位域”

在结构体中位段的定义格式为:

unsignede :;

例如:

structbytedata{

unsigned a:2; /*位段a,占2位*/unsigned b:6; /*位段b,占6位*/}data;

引用结构体的位段成员同引用结构体其他类型成员一样,但应注意位段的最大取值范围不要超出二进制位数限制的范围,否则超出部分会丢失。

例如:

data.a = 2;  /*正确*/

data.b = 10;/*错误,超出范围(a占2位,能容纳的最大值为3)*/

关于位段,还需要注意以下几点:

(1)位段成员的数据类型必须是unsigned.

(2)可以定义长度为0的位段。这使下一位段从下一存储单元(一个存储单元一般是两个字节)开始。例如:

structbytedata{

unsigned a:1;

unsigned b:2;

unsigned:0;

unsigned c:3;

};

本来a、b、c应连续存放在一个存储单元中,但由于用长度0的位段将b、c隔开,现只能将a、b存放在一个存储单元中,而c另存放在下一个单元中

(3)位段不能跨单元存储,如果上一单元的剩余空间不够存储新的位段,则跳过此剩余空间,将该位段存放在下一个单元中

(4)可以定义无名位段,但其空间不能使用。

structbytedata{

unsigned a:1;

unsigned:2; /*无名位段,占2位,不能使用*/unsigned c:3;

};

(5)一个位段的长度不能大于一个存储单元的长度。

(6)不能定义位段数组。

(7)位段可以以%d、%u、%o、%x等格式输出。

(8)位段若出现在表达式中,将被系统自动转换成整型数。

位段排序:

先定义先排序

原文:http://www.cnblogs.com/Caden-liu8888/p/5939004.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值