结构体中的问题,此题的答案为什么是这样?
#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 展开
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 展开
1个回答
展开全部
这是结构体位域的问题,初级编程不常见~
简单解释一下,了解即可。
可以这样理解:
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。
简单解释一下,了解即可。
可以这样理解:
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。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询