关于union与struct的几点疑问

visayafan 2010-10-16 11:41:56
http://student.csdn.net/space.php?do=question&ac=detail&qid=1728
有几处不明白 请高手指点:
#include <iostream>
using namespace std;

struct byte
{
unsigned int a1:1; //这里:1是表示1位?是最高位还是最低位? 为什么最后结果是1
int a2:1;
int a3:1;
int a4:1;
int a5:1;
int a6:1;
int a7:1; //a7的最后结果是-1 a1与a7不同??
int a8:1;
};

union b
{
char c;
struct byte bit;
}union_a;

int main(int argc, char *argv[])
{
union_a.c = 'A';
cout << (union_a.bit.a7 + union_a.bit.a1) << endl;
return 0;
}
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2010-10-17
  • 打赏
  • 举报
回复
先了解,真正用到的时候再说.
昵称很不好取 2010-10-17
  • 打赏
  • 举报
回复
看看C和指针就明白了,位域的移植性不好,具体如果分配跟具体的系统环境有关,许多编译器都a1放在低位
visayafan 2010-10-17
  • 打赏
  • 举报
回复
多谢大家帮忙
我终于搞懂了
gules 2010-10-17
  • 打赏
  • 举报
回复
这里的a1~a8都bit位,先不管其显示类型是什么(unsigned int或int),1bit的取值范围是:0或者1。
这段程序中,a1与a7的取值都是1(unsigned int),而a7的显示类型为有符号类型,因此显示为-1。
一般而言,一个无符号整数类型的最大值在有符号类型下的值即是-1(因为有符号类型是用的是补码)。
yinzk 2010-10-16
  • 打赏
  • 举报
回复
其它的疑问我也不太清楚,来学习的。。。
yinzk 2010-10-16
  • 打赏
  • 举报
回复
a1 表示的是最低位的 1 位,但是它的类型是 unsigned int 型的

64,439

社区成员

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

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