求助关于UNION的问题~

zhouyangsky109 2009-04-21 01:34:14
#include <iostream.h>
#include <stdio.h>
void main()
{
union number
{
int x;
char str[4];
}a;
a.x=6513249;
char b='A';
int c=61;
for(int i=0;i<4;i++)
cout<<a.str[i]<<endl;
printf("%x\n",a.x); /*输出ascii码值*/
printf("%c",c);
//put
}
这个是源码,为什么输出的结果是这样的
a
b
c

636261
=
str[0]=61 刚好是'a'
str[1]=62 刚好是'b'
str[2]=63 刚好是'c'
str[3]=00 刚好是'\0' 结束符

按道理说a的ascii码不是97么,对应的61以字符输出应该是‘=’啊,请大侠帮忙帮小弟解决下
...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
void main()
{
union number
{
int x;
char str[4];
}a;
a.x=6513249;
char b='A';
int c=61;
for(int i=0;i <4;i++)
cout < <a.str[i] < <endl; //0x63626100,都打印出来了,还有问题吗?对应'a','b','c',0
printf("%x\n",a.x); /*输出ascii码值*/
printf("%c",c);
//put
}

morris88 2009-04-21
  • 打赏
  • 举报
回复
a.x = 6513249 = 0x00636261


这个 32位的数在内存中的存储方式跟 cpu 的大小端有关系;在小端模式的 cpu 中,它在内存中的 4 个字节,
依从低到高的顺序分别为 [0x61] [0x62] [0x63] [0x00],那么对应的 a.str 就是:

a.str[0] = 0x61;
a.str[1] = 0x62;
a.str[2] = 0x63;
a.str[3] = 0x00;
jackyjkchen 2009-04-21
  • 打赏
  • 举报
回复
97是10进制吧,x=6513249=0x636261,63、62、61都是16进制,你拿计算器算一下,0x61是不是等于97?
hityct1 2009-04-21
  • 打赏
  • 举报
回复
十六进制的61正好等于十进制的97.

65,210

社区成员

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

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