包含struct的union的赋值结果问题

woneedjob 2011-07-05 09:04:01

typedef struct
{
unsigned int a:2;
unsigned int b:3;
unsigned int c:3;
}BitData;
typedef union
{
BitData Data;
char cData;
}UnionData;
UnionData unionData;
unionData.cData = 100;
cout<<"cData = "<<unionData.cData<<endl; //值为:d ,为什么?不是刚赋值100吗?
cout<<"Bit Data = "<<unionData.Data.a<<endl;// 0 这后面几个勉强理解,但高手说的更通俗些就更好了
cout<<"Bit Data = "<<unionData.Data.b<<endl;// 1
cout<<"Bit Data = "<<unionData.Data.c<<endl;// 3
...全文
128 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
就想叫yoko 2011-07-05
  • 打赏
  • 举报
回复
cData的类型是char
aozhi 2011-07-05
  • 打赏
  • 举报
回复
100=0x64 ascii码0x64代表字符d。
后面是位域的问题。
  • 打赏
  • 举报
回复
typedef struct  
{
unsigned int a:2;
unsigned int b:3;
unsigned int c:3;
}BitData;
typedef union
{
BitData Data;
char cData;
}UnionData;
UnionData unionData;
unionData.cData = 100;
cout<<"cData = "<<unionData.cData<<endl; // 因为cData成员是字符型变量,计算机将100 ASCII码来对待(因为在计算机中字符以ASCII存的)存储,d的ASCII码的十进制恰好是100(十六进制位64H),所以是d.

d的ASCII码为64H,表示为二进制为0110 0100。
cout<<"Bit Data = "<<unionData.Data.a<<endl;// 0 a占两位,既是00,既是0
cout<<"Bit Data = "<<unionData.Data.b<<endl;// 1 b占三位,既是001,既是1
cout<<"Bit Data = "<<unionData.Data.c<<endl;// 3 c占三位,既是011,既是3

AnYidan 2011-07-05
  • 打赏
  • 举报
回复
printf("cData = %d\n",unionData.cData); 输出100
handoudouhao 2011-07-05
  • 打赏
  • 举报
回复
‘d’的ASCII码值是100,所以赋100输出时时‘d’
bdmh 2011-07-05
  • 打赏
  • 举报
回复
不是d是什么,cData是char类型,字符d的数值就是100

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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