为什么unsigned long 类型值为64的的十六进制值为0x0,0x0,0x0,0x0?

168ljg 2003-02-24 05:28:10
有如下程序:
main(){
unsigned long MoneyNew=25600;
printf("MoneyNew:%x,%x,%x,%x",*((unsigned char*)MoneyNew+0),*((unsigned char*)MoneyNew+1),*((unsigned char*)MoneyNew+2),*((unsigned char*)MoneyNew+3));
}

为什么输出的结果是MoneyNew:0,0,0,0? 而我在计算器里用十六进制转换得到的结果是
0x6400?
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
168ljg 2003-02-24
  • 打赏
  • 举报
回复
在大家的帮助下,问题已经解决。谢谢各位!
z_sky 2003-02-24
  • 打赏
  • 举报
回复
MoneyNew 应该取址 &MoneyNew,如:
*((unsigned char*)MoneyNew+0)
=>
*((unsigned char*)(&MoneyNew)+0)

StdAfx 2003-02-24
  • 打赏
  • 举报
回复
#include <stdio.h>
main(){
unsigned long MoneyNew=25600;
printf("MoneyNew:0x%x\n",MoneyNew);
}
zhouzhaohan 2003-02-24
  • 打赏
  • 举报
回复
不对吧!MoneyNew又不是指针。
应该是这样


void main()
{

unsigned long *MoneyNew,money;
money=25600;
MoneyNew=&money;
printf("MoneyNew:%x,%x,%x,%x",*((unsigned char*)MoneyNew+0),*((unsigned char*)MoneyNew+1),*((unsigned char*)MoneyNew+2),*((unsigned char*)MoneyNew+3));
getchar();
}
如果你用的是initel的机器,输出应该是0,64,0,0
如果是别的架构的机器,比如motorola的,则是0,0,64,0
NowCan 2003-02-24
  • 打赏
  • 举报
回复
你这个数已经超出了unsigned char 的范围了。

69,369

社区成员

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

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