Chinaunix

标题: 请问:C中的位段的问题 [打印本页]

作者: netdoger    时间: 2016-07-05 09:32
标题: 请问:C中的位段的问题
请看:
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吗?
作者: seufy88    时间: 2016-07-05 09:59
这个编译器依存的。
a不一定要放在最低3位,C语言并没有这样的规定。所以怎么实现就看平台上的编译器了。
作者: netdoger    时间: 2016-07-05 10:15
那如何查看编译器的设置呢?我用的是X86系统
作者: windoze    时间: 2016-07-05 10:15
这种东西没有标准,所以不要用bit field,直接用位运算。
作者: seufy88    时间: 2016-07-05 10:41
回复 3# netdoger


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

不过同样是X86平台,不同编译器也可以使用不同安排方式,所以不要去深究a是怎样存放的
作者: 爻易    时间: 2016-07-05 10:43
就如C没有规定必须用main函数一样,这些都是实现相关的。

要看具体位段如何安排,写个小测试程序打印整个字节数据看一下即可




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2