当前位置: 技术问答>linux和unix
关于位段的使用
来源: 互联网 发布时间:2016-03-11
本文导语: 看书过程中碰到了位段问题:贝思不得其解阿,请高手指点 运行环境:Unix 程序: int main(){ struct bit{ int a:1; int :2; int b:3; int c:2; }bs,*pbs; bs.a =...
看书过程中碰到了位段问题:贝思不得其解阿,请高手指点
运行环境:Unix
程序:
int main(){
struct bit{
int a:1;
int :2;
int b:3;
int c:2;
}bs,*pbs;
bs.a = 1;
bs.b = 7;
bs.c = 3;
printf("bs.a=%d,bs.b=%d,bs.c=%dn",bs.a,bs.b,bs.c);
pbs = &bs;
pbs->a = 0;
pbs->b &=3;
pbs->c |=1;
printf("bs.a=%d,bs.b=%d,bs.c=%dn",pbs->a, pbs->b, pbs->c);
printf("sizof(bs) = %dn",sizeof(bs));
}
输出:
bs.a=-1,bs.b=-1,bs.c=-1
bs.a=0,bs.b=3,bs.c=-1
sizof(bs) = 4
为什么都是-1阿?他们在内存中是什么样子的啊?
我用gdb调试过程中,发现bs={a = -1, -2, b = -4, c = -1},不得其解啊?
运行环境:Unix
程序:
int main(){
struct bit{
int a:1;
int :2;
int b:3;
int c:2;
}bs,*pbs;
bs.a = 1;
bs.b = 7;
bs.c = 3;
printf("bs.a=%d,bs.b=%d,bs.c=%dn",bs.a,bs.b,bs.c);
pbs = &bs;
pbs->a = 0;
pbs->b &=3;
pbs->c |=1;
printf("bs.a=%d,bs.b=%d,bs.c=%dn",pbs->a, pbs->b, pbs->c);
printf("sizof(bs) = %dn",sizeof(bs));
}
输出:
bs.a=-1,bs.b=-1,bs.c=-1
bs.a=0,bs.b=3,bs.c=-1
sizof(bs) = 4
为什么都是-1阿?他们在内存中是什么样子的啊?
我用gdb调试过程中,发现bs={a = -1, -2, b = -4, c = -1},不得其解啊?
|
因为你的编译器认为int就是signed int型。
struct bit{
unsigned int a:1;
unsigned int :2;
unsigned int b:3;
unsigned int c:2;
}
这样你就会看到你要的结果
struct bit{
unsigned int a:1;
unsigned int :2;
unsigned int b:3;
unsigned int c:2;
}
这样你就会看到你要的结果
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。