C语言中的位段(转)

位段的相关知识

位段是 C 语言特有的数据结构, 它允许我们定义一个由位组成的段, 并可为它赋以一个名字。

定义五个变量,实际上标志 f1, f2, f3 分别只需要 1 位。变量 type 只需要 4 , 而变量 index 只需要 9 位。 总共是 16 ---- 2 个字节。我们用两个字节就够了。
我们可这样来做:
struct packed_struct
{
    unsigned int f1 :1;
    unsigned int f2 :1;
    unsigned int f3 :1;
    unsigned int type :4;
    unsigned int index :9;
};

该例中, 我们定义了一个结构 packed_struct。该结构定义了五个成员。第一个成员叫做 f1, unsigned int 类型的。紧跟在该成员名之后的 :1 规定了它以 1 位存放。类似地, 标志 f2 f3 被定义为长度只有 1 位的。定义成员 type 占有 4 位。定义成员 index 占有 9 位。C 编译器自动地把上面的位段定义压缩在一起。位段的划分如图所示。packed_struct 总共使用了 16 位。

 

我们已经定义了一个称作为 packed_struct 的包含着位段的结构。现在, 我们象下面那样定义一个称作为 packet_data 的变量: struct packed_struct packed_data; 于是, 我们就可以用简单的语句, packed_data type 位段设置为 7:

packed_data.type = 7; 类似地, 我们可以用下面的语句把这个位段的值设为 n:

packed_data.type = n; 我们不必担心 n 的值太长 , 以致不能放入 type 位段中 , C 编译器会自动地仅取出 n 的低四位 , 把它赋值给 packed_data.type 。取出位段的值也自动地处理的 , 因此语句 n = packed_data.type; 将从 packed_data 中取出 type 位段 , 并把它的值赋给 n

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值