结构体中的问题,此题的答案为什么是这样?

#include<iostream.h>typedefstructi{inta:1;intb:1;intc:1;intd:1;}A;voidmain(){Ae;e.a=1... #include <iostream.h>

typedef struct i
{
int a:1;
int b:1;
int c:1;
int d:1;
}A;

void main()
{
A e;
e.a=1;
e.b=0;
e.c=0;
e.d=2;
cout<<sizeof(A)<<endl;
cout<<e.a<<endl;
cout<<e.b<<endl;
cout<<e.c<<endl;
cout<<e.d<<endl;
}的输出结果为什么是4,-1,0,0,0
展开
 我来答
renjianke
2010-05-05 · TA获得超过2932个赞
知道小有建树答主
回答量:580
采纳率:0%
帮助的人:662万
展开全部
这是结构体位域的问题,初级编程不常见~
简单解释一下,了解即可。
可以这样理解:
int a:1;
int b:1;
int c:1;
int d:1;

这样只能存储1个位的数据,有符号数 0 代表正数,1代表复数,由于你使用的是int ,它是有符号的,如果a,b,c,d存储了1,则其输出时把它解释为符号位也就是-1,所以你赋给它的数是奇数则存入的是1(最后一位二进制,当然要分大端模式还是小端模式),赋给它的是偶数则存入的是0。
所以:
e.a=1;
e.b=2;
e.c=3;
e.d=4;
输出的是-1 0 -1 0

一般位域不存有符号的数。如果改为unsigned int 则就不会出现-1。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式