免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2791 | 回复: 5

[C] 请问:C中的位段的问题 [复制链接]

论坛徽章:
0
发表于 2016-07-05 09:32 |显示全部楼层
请看:
struct pack_data
{
unsigned char a:3;
unsigned char b:1;
unsigned char c:4;
}data;

data.a=5;
data.b=1;
data.c=3;
请问:在位段中,a是字节中最低3位吗?
这个字节的值是0x3d吗?

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
发表于 2016-07-05 09:59 |显示全部楼层
这个编译器依存的。
a不一定要放在最低3位,C语言并没有这样的规定。所以怎么实现就看平台上的编译器了。

论坛徽章:
0
发表于 2016-07-05 10:15 |显示全部楼层
那如何查看编译器的设置呢?我用的是X86系统

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2016-07-05 10:15 |显示全部楼层
这种东西没有标准,所以不要用bit field,直接用位运算。

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
发表于 2016-07-05 10:41 |显示全部楼层
回复 3# netdoger


    你使用union方式就可以读出底层字节内容了。也就可以得知你用的编译器是如何安排a的。

不过同样是X86平台,不同编译器也可以使用不同安排方式,所以不要去深究a是怎样存放的

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
发表于 2016-07-05 10:43 |显示全部楼层
就如C没有规定必须用main函数一样,这些都是实现相关的。

要看具体位段如何安排,写个小测试程序打印整个字节数据看一下即可
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP