c语言中内存问题

#include<stdio.h>intmain(){signedlongb;unsignedlonglonga=0xae34bcdf;scanf("%x",&b);//... #include<stdio.h>

int main(){

signed long b;
unsigned long long a = 0xae34bcdf;

scanf("%x",&b); //输入 11111111
printf("%llx %lx\n",b,a); //为 0xae34bcdf11111111

return 0;
}
如程序所写 为什么会出现这种情况? 我取了两个变量的地址看 一个是10~13 一个是1c~23 能说下为什么会出现这种情况吗?
展开
 我来答
auhuj
推荐于2016-06-12 · TA获得超过167个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:101万
展开全部
楼主这个地方写错了: printf("%llx %lx\n",b,a);

应该写成 printf("%lx %llx\n",b,a);

至于在写错的情况下为什么输出是那些:
printf("%llx %lx\n",b,a);首先把8字节的a压入栈,然后把4字节的b压入栈,然后调用printf函数根据第一个格式化%llx在栈上去取一个8字节的数,刚好把a的低四位和b的四位拿出来形成了0xae34bcdf11111111。然后再根据第二个格式化%lx去栈上取4字节的数,恰好是a的高4位,所以输出会是0。
梁昌仔
2014-11-21 · TA获得超过272个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:203万
展开全部
因为你的b是long型的,而输出的时候是llx,则long long型的,所以会出现这样的错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-11-21
展开全部
函数的调用:a(8个字节入栈)—>b(4个字节入栈)
            printf()取上面8个字节
            。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2014-11-21 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6474万
展开全部
0xae34bcdf 是个16进制常数

%x %lx 都是表示操作数据按16进制进行处理
所以,输出就是这样子,不知道你所说的情况是这个吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Coo_boi
2014-11-21 · TA获得超过1333个赞
知道大有可为答主
回答量:2209
采纳率:50%
帮助的人:248万
展开全部
这种是指哪种情况?没看懂楼主要表达什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式