返回信息流#include <stdio.h>
typedef unsigned int uint32_t;
void main()
{
uint32_t a=0xf4000000;
uint32_t *p=&a;
char *q=(char *)p;
printf("%x",*(q+3));
}
代码如上,运行结果为:fffffff4,不是预想中f4,怪异的是把a的值改为0x12000000,结果就是12了,实在困惑,求解答,谢谢。
这是一条镜像帖。来源:北邮人论坛 / cpp / #36889同步于 2010/3/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求教一道令我困惑的C问题
ld1987biti
2010/3/22镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
用GDB调试吧!注意Intel处理器是Little-Endian存储变量,q+3指向的内存位置是变量a的最高字节,但却是q+3所指的最低字节。
前一种情况应该是被扩展高位为ff,后一种情况被扩展为0,具体情况不太明白,大牛指教,我也想知道!
不过我猜应该和编译器有关吧!
希望对你有用
【 在 Vampire 的大作中提到: 】
: 改成unsigned char在小端机器上就是F4了
: --
: 拒绝浮躁
: ...................
哦 对 我忘了 不会用gdb,粘到vc里调试发现一直是-12,谢谢指导,现在行了
【 在 ld1987biti 的大作中提到: 】
: #include <stdio.h>
: typedef unsigned int uint32_t;
: void main()
: ...................
小端法存储,难道是因为%x?o(∩_∩)o...
【 在 zenith 的大作中提到: 】
: 小端法存储,难道是因为%x?o(∩_∩)o...
是因为指针的类型,因为f4超过了char型的范围,读出的是负数-12,如3楼所说,改为unsigned char型的指针就ok了。