关于C语言里的位域赋值问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 16:33:38
赋值结果让人想不通:
typedef struct _ss_
{
int a:2;
int b:2;
int c:2;
int d:1;
}ss;

ss ff;
int uu

ff.a=1;
ff.b=2;
ff.c=3;
ff.d=4;

uu = ff.a; //uu结果为1,没疑问
uu = ff.b; //uu结果为0xfffffffe,为什么?不是应该是2吗?
uu = ff.c; //uu结果为0xffffffff,为什么?我觉得应该是3啊
uu = ff.d; //uu结果为0,正确

各位看看,ff.b和ff.b想不通

c在结构提中定义位,是无符号整型,unsigned int。你定义成int那么默认为有符号整型了。
虽然可以定义成int类型,但是一般没人这样去做。因为有更好的方法去这样做。
你的应该改成

typedef struct _ss_
{
unsigned int a:2;
unsigned int b:2;
unsigned int c:2;
unsigned int d:1;
}ss;

ss ff;
int uu

ff.a=1;
ff.b=2;
ff.c=3;
ff.d=4;

uu = ff.a;
uu = ff.b;
uu = ff.c;
uu = ff.d;

0xfffffffe哪来的那么多f,你用什么看结果的?
而且3=100B,你只给了C两位,是放不下的

b,c,d,都是内存空间不足而造成溢出现象,只要给够内存空间,输出就会是正确的。oxffff...是十六进制的数,而出现的原因则是溢出!符号位出现错误