当前位置: 代码迷 >> C语言 >> [求助]这样能输出二进制编程吗?
  详细解决方案

[求助]这样能输出二进制编程吗?

热度:141   发布时间:2006-05-08 16:48:00.0
[求助]这样能输出二进制编程吗?

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编辑过]


----------------解决方案--------------------------------------------------------

楼主用的魔鬼编译器吧


----------------解决方案--------------------------------------------------------
以下是引用herotobe在2006-5-8 17:31:00的发言:

我运行结果为:1
2

怎么可能,说明你的编译环境~
----------------解决方案--------------------------------------------------------
unsigned b:1;
是什么意思?

----------------解决方案--------------------------------------------------------
b只占unsigned的第一个比特位
----------------解决方案--------------------------------------------------------
哦,还有这么个。
----------------解决方案--------------------------------------------------------

  相关解决方案