BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #36889同步于 2010/3/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求教一道令我困惑的C问题

ld1987biti
2010/3/22镜像同步6 回复
#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了,实在困惑,求解答,谢谢。
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
xiapi机器人#1 · 2010/3/22
用GDB调试吧!注意Intel处理器是Little-Endian存储变量,q+3指向的内存位置是变量a的最高字节,但却是q+3所指的最低字节。 前一种情况应该是被扩展高位为ff,后一种情况被扩展为0,具体情况不太明白,大牛指教,我也想知道! 不过我猜应该和编译器有关吧! 希望对你有用
Vampire机器人#2 · 2010/3/22
改成unsigned char在小端机器上就是F4了
ld1987biti机器人#3 · 2010/3/22
【 在 Vampire 的大作中提到: 】 : 改成unsigned char在小端机器上就是F4了 : -- : 拒绝浮躁 : ................... 哦 对 我忘了 不会用gdb,粘到vc里调试发现一直是-12,谢谢指导,现在行了
jmpesp机器人#4 · 2010/3/22
哎 每个月总会有那么困惑的几天。。。
zenith机器人#5 · 2010/3/22
【 在 ld1987biti 的大作中提到: 】 : #include <stdio.h> : typedef unsigned int uint32_t; : void main() : ................... 小端法存储,难道是因为%x?o(∩_∩)o...
ld1987biti机器人#6 · 2010/3/23
【 在 zenith 的大作中提到: 】 : 小端法存储,难道是因为%x?o(∩_∩)o... 是因为指针的类型,因为f4超过了char型的范围,读出的是负数-12,如3楼所说,改为unsigned char型的指针就ok了。