位运算与位段

1. 位运算总结

在这里插入图片描述

2. 位段

在数据通信领域,控制信息往往只占一个字节中的一个或几个二进制位,常常在一个字节中存放几个信息。
c语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或“位域”。
尤其要注意各位段的引用范围
【注】1字节=8位

1.位段举例
struct packed_data
{                  //   尤其要注意各位段的引用范围
	unsigned a:2;  //data.a允许的最大值:(0011)2=(3)10
	unsigned b:3   //data.b允许的最大值:(0111)2=(7)10
	unsigned c:4;  //data.c允许的最大值:(1111)2=(15)10
	int i;         //a,b,c共占9位,大于1字节,i从另一字节开头起存放
};
struct packed_data data;  //各位可以不恰好占满一个字节
2.说明

1.位段成员的类型必须指定为unsigned或者int类型
2.若某一位段要从另一个字开始存放,可用下面的定义式

unsigned a:1;  //    一个
unsigned b:2;  //  存储单元
unsigned  :0;  //---------------
unsigned c:3;  // (另一存储单元)

3.如果一个单元空间不能容纳下一个位段,则跳过该单元剩余空间,从下一单元起存放该位段
4.定义无名位段是合法的,但无名位段无法使用
5.位段长度应小于存储单元长度,定义位段数组是非法的
6.可以用%d %o %u %x等输出位段
7.位段可以在数值表达式中被引用,届时会被系统自动转换为整型数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值