C语言中如何把位赋值给字节,史上最全的C位域总结【转】

本文详细介绍了C语言中的位域,包括位域的作用、使用场景、存储方式、注意事项等。位域主要用于在内存有限的情况下节省空间,或者映射特定的数据结构。位域类型限于int及其unsigned、signed变种,位域分配要考虑编译器差异,且不建议跨字存放。位域的使用会影响程序的可移植性和处理时间,但能提供位级操作的便利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过个人查阅相关的资料和理解,现对C语言的位域做一个总结,对于位域的定义我在这里没有多说,我这里主要是对位域有歧义的地方进行系统的总结.我个人觉得总结的比较完整,如有不够完整或有异义的地方大家可以留言指点.

1.位域又叫位段(位字段),是一种特殊的结构成员或联合成员(即只能用在结构或联合中),用于指定该成员在内存存储时所占用的位数,从而可以在机内更紧凑地表示数据。

2.位域的使用主要出现在如下两种情况:

(1)当机器可用内存空间较少而使用位域可以大量节省内存时。如,当把结构作为大数组的元素时。

(2)当需要把一结构或联合映射成某预定的组织结构时。例如,当需要访问字节内的特定位时。

3. 当要把某个成员说明成位域时,其类型只能是int,unsigned int与signed int三者之一(说明:int类型通常代表特定机器中整数的自然长度。short类型通常为16位,long类型通常为32位,int类型可以为16位或 32位.各编译器可以根据硬件特性自主选择合适的类型长度.见The C Programming Language中文 P32)。

4.带位域的结构在内存中各个位域的存储方式取决于具体的编译程序;它们既可以从左到右,也可以从右到左存储。

5.在一包含位域说明的强构或联合区分符中也可以同时说明普通成员,例如:

struct st1

{

unsigned a:7;

unsigned b:4;

unsigned c:5;

int      i;     //i是普通成员,这会被存放在下一个字,即字对齐};

6.int值不能跨字存放,同样位域也最好不要跨字存放(意思说是说:各位域的分配位数加起来要在16位或32位以内,如果编译器分配int为16位,则加起来要在16位以内,如果加起来大于16位,则最好空出剩余的位域,从下一个字开始分配位域).

7.特殊宽度0或者说长度为0的无名位域有着特殊的用途.它用于指示将其前后的两

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值