永发信息网

C中的位域和位段,请帮我解释下,最好举个例子.

答案:2  悬赏:60  手机版
解决时间 2021-03-04 12:12
C中的位域和位段,请帮我解释下,最好举个例子.
最佳答案
有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可.为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”. 所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数.每个域有一个域名,允许在程序中按域名进行操作.这样就可以把几个不同的对象用一个字节的二进制位域来表示. 1. 位域的定义和位域变量的说明 位域定义与结构定义相仿,其形式为: struct 位域结构名 { 位域列表 }; 其中位域列表的形式为: 类型说明符 位域名:位域长度 例如: struct bs { int a:8; int b:2; int c:6; }; 位域变量的说明与结构变量说明的方式相同. 可采用先定义后说明,同时定义说明或者直接说明这三种方式. 例如: struct bs { int a:8; int b:2; int c:6; }data; 说明data为bs变量,共占两个字节.其中位域a占8位,位域b占2位,位域c占6位. 对于位域的定义尚有以下几点说明: 1) 一个位域必须存储在同一个字节中,不能跨两个字节.如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域.也可以有意使某位域从下一单元开始. 例如: struct bs { unsigned a:4 unsigned :0 unsigned b:4 unsigned c:4 } 在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位. 2) 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位. 3) 位域可以无位域名,这时它只用来作填充或调整位置.无名的位域是不能使用的.例如: struct k { int a:1 int :2 int b:3 int c:2 }; 从以上分析可以看出,位域在本质上就是一种结构类型,不过其成员是按二进位分配的. 2. 位域的使用 位域的使用和结构成员的使用相同,其一般形式为: 位域变量名·位域名 位域允许用各种格式输出. 【例12.6】 main(){ struct bs { unsigned a:1; unsigned b:3; unsigned c:4; } bit,*pbit; bit.a=1; bit.b=7; bit.c=15; printf(%d,%d,%d\n,bit.a,bit.b,bit.c); pbit=&bit; pbit->a=0; pbit->b&=3; pbit->c|=1; printf(%d,%d,%d\n,pbit->a,pbit->b,pbit->c); } 上例程序中定义了位域结构bs,三个位域为a,b,c.说明了bs类型的变量bit和指向bs类型的指针变量pbit.这表示位域也是可以使用指针的.程序的9、10、11三行分别给三个位域赋值(应注意赋值不能超过该位域的允许范围).程序第12行以整型量格式输出三个域的内容.第13行把位域变量bit的地址送给指针变量pbit.第14行用指针方式给位域a重新赋值,赋为0.第15行使用了复合的位运算符&=,该行相当于: pbit->b=pbit->b&3 位域b中原有值为7,与3作按位与运算的结果为3(111&011=011,十进制值为3).同样,程序第16行中使用了复合位运算符|=,相当于: pbit->c=pbit->c|1 其结果为15.程序第17行用指针方式输出了这三个域的值.
全部回答
好好学习下
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
昆明理工大学水文学与水资源专业怎样
Auto CAD 家具设计100例
长城驾校文景路招生点在什么地方啊,我要过去
5月25日5月25日上升星座是什么
【止回阀安装】止回阀安装时应使介质流动方向
AMD那些6核的cpu怎么样
怎么看别人二维码
新广丰综合批发市场(西南门)地址在什么地方,
孝素的作用,治病吗
做人之道除了尊老爱幼还有什么?
户县农村危房改造有啥政策
飞机托运的行李可以带水果吗?
木质大衣柜本身生虫子怎么办?
重装系统后为什么一点浏览器就蓝屏.还出现很
【维持渗透压的钠离子和氯离子以及葡萄糖,氨
推荐资讯
求助,m4a格式歌曲不能在电脑里显示封面了
瘦腿针多少钱一支
是否所有的人都可以从事商务谈判工作
腾讯啪啪三国啥时开新区
人工智能投顾是什么意思?
如何清理iphone app缓存
大米存放时间过长,到底能不能吃
含有ig的英语单词有哪些
sketchup layout 字体怎么编辑,求解
x^2-19x+36=0的两个根是多少
插上电源相隔三四秒手机才显示充电!这是为什
春分节气谚语
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?