main()
{ typedef struct {unsigned b:1;} BIT; /*位结构 */
union
{int t;
BIT bit[16];
} x;
int i;
x.t=0;
for(i=0;i<16;i++)
printf("%d",x.bit[i].b);
getch(); /* 请不要删除此行 */
}
这段程序怎么不能打印 t 的二进制编码?程序哪儿出问题了
----------------解决方案--------------------------------------------------------
不能
----------------解决方案--------------------------------------------------------
你这个打印的应该全部是16位中的最低位,我觉得,等高手.或者换个方法用'&'
----------------解决方案--------------------------------------------------------
原因很简单
因为
typedef struct {
unsigned b:1;
}BIT;
这样定义的时候,如果整个struct结构不足unsigned类型长度的要按照unsigned长度进行
证明:
int main(){
typedef struct {
unsigned b:1;
}BIT;
printf("%d\n",sizeof(BIT));
printf("%d\n",sizeof(unsigned));
return 0;
}
输出结果均为4
所以你那程序的BIT的实际长度不是1位,而是4个字节
PS,我用的是32位的C,如果是TC运行的话,应该是2而不是4
----------------解决方案--------------------------------------------------------
我运行结果为:1
2
为什么不是 2
2
[此贴子已经被作者于2006-5-8 17:42:32编辑过]
----------------解决方案--------------------------------------------------------
楼主用的魔鬼编译器吧
----------------解决方案--------------------------------------------------------
我运行结果为:1
2
怎么可能,说明你的编译环境~
----------------解决方案--------------------------------------------------------
unsigned b:1;
是什么意思?
----------------解决方案--------------------------------------------------------
b只占unsigned的第一个比特位
----------------解决方案--------------------------------------------------------
哦,还有这么个。
----------------解决方案--------------------------------------------------------