某公司一个笔试题求解!

蛮牛儿 2011-10-26 10:12:33

long I = 0x01020304;
char *P = (char *)&I;
P++;P++;
*P = 0x80;
printf("I = %x,p = %X\n\n\n",I,*(P++));

当然,输出I的值为:1800304;但为什么输出P的值为:FFFFFF80,求大神解释,小弟实在是不明白……
...全文
216 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoudianlong 2011-10-28
  • 打赏
  • 举报
回复
学习下。
Phoenix Slade 2011-10-28
  • 打赏
  • 举报
回复
呵呵 看看
蛮牛儿 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wyfwx 的回复:]
%c 而不是%x
[/Quote]
呵呵,就是%X哈
蛮牛儿 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]
p是char,有符号的。0x80是负数
这题还存在一个大小端问题。
[/Quote]
嗯,这个确实存在大小端问题,那为什么负数的16进制要用32位来表示呢?
xinshirn 2011-10-26
  • 打赏
  • 举报
回复
顶楼上。
*p=-128
也即FFFFFF80
luciferisnotsatan 2011-10-26
  • 打赏
  • 举报
回复
p是char,有符号的。0x80是负数
这题还存在一个大小端问题。
icekingson 2011-10-26
  • 打赏
  • 举报
回复
整个都没清楚,谁能解释下。
AnYidan 2011-10-26
  • 打赏
  • 举报
回复
大小端也影响到位域
luciferisnotsatan 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bull_liu 的回复:]

引用 1 楼 luciferisnotsatan 的回复:
p是char,有符号的。0x80是负数
这题还存在一个大小端问题。

嗯,这个确实存在大小端问题,那为什么负数的16进制要用32位来表示呢?
[/Quote]
%x的类型就是32位的(int整型大小),输出为无符号16进整数。补位后就是0xFFFFFF80
printf("I = %x,p = %X\n\n\n",I,(unsigned char)*(P++));
这样试试
gold_water 2011-10-26
  • 打赏
  • 举报
回复
面试题都是有点BT的,有的甚至就是错的
wyfwx 2011-10-26
  • 打赏
  • 举报
回复
%c 而不是%x

69,373

社区成员

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

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