下面代码的输出都是什么,为什么???

hongxia1981 2009-08-30 10:21:27
#include <iostream>
using namespace std;
struct bit
{ int a:3;
int b:2;
int c:3;
};
int main()
{
bit s;
char *c=(char*)&s;
cout<<sizeof(bit)<<endl;
*c=0x99;
cout << s.a <<endl <<s.b<<endl<<s.c<<endl;
int a=-1;
printf("%x\n",a);
return 0;
}
...全文
27 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangkunhenry 2009-08-30
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
struct bit
{
int a:3;
int b:2;
int c:3;
};
int main()
{
bit s;
char *c=(char*)&s;
cout <<sizeof(bit) <<endl; //4 --> 3+2+3=8占一个字节,所以bit结构体占一个int的大小就足够了。
*c=0x99; //二进制--->1001 1001 看下面
cout << s.a <<endl <<s.b <<endl <<s.c <<endl; //1 -1 -4
int a=-1;
printf("%x\n",a); //ffffffff
return 0;
}
//内存结构
// 100 11 001
// c b a
// -4 -1 1
liao05050075 2009-08-30
  • 打赏
  • 举报
回复
sizeof(bit)按int对齐,所以是4个字节

0x99=10011001
于是,bit中a占低3位,即001,为1,b占之后的两位,11,就是有符号数-1,c占剩下3位100,就是-4

看一看位域的相关内容吧
http://baike.baidu.com/view/1256879.htm

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧