long long int 用%d输出的解释

chenhaifeng88888 2009-03-29 08:01:04
#include <stdio.h>

int main()
{
long long int a = 1;
long long int b = 2;
printf("%d %d\n", a , b);
}

为什么b每次不管什么值都输出0

注意要解释,long long int 用%d输出是怎么输出的?
谢谢。
...全文
1926 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
acdbxzyw 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 newerC 的回复:]
%I64D===>%I64d
[/Quote]

楼上正解 顶
dongpy 2009-03-31
  • 打赏
  • 举报
回复
printf("%d %d\n",a,b);
a,b入栈时是64位数,而printf是以32位数解析"%d"格式的,即printf("%d %d\n",a,b);只解析了a的低32位和高32位。

printf("%d %d,%d %d\n",a,b);
这样会输出:1 0,2 0
newerC 2009-03-31
  • 打赏
  • 举报
回复
%I64D===>%I64d
lingyin55 2009-03-30
  • 打赏
  • 举报
回复
printf 输出 long long ,在windows 环境下 %I64d, 在linux 环境下 %lld

wohow 2009-03-30
  • 打赏
  • 举报
回复
上面3层楼都不对吧?
printf("%d %d\n", a , b);
首先把b压栈,然后把a压栈(都是8个字节)。运行时遇到第一个%d,取4个字节,由于intel采用小端序,先取出4个字节实际是a的低4个字节。再遇到一个%d,又取4个字节,实际是a的高4个字节,因此无论b如何变化,第二个%d总是打印0。
long long int a=0x1200340056007800;
printf("%d %d\n", a, b);
就可以看出如何打印的了,注意把打印出的十进制值转换为16进制
品茶 2009-03-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
printf("%d %d\n", a , b);

可以这样理解吧,%d认为数据只有32位,于是从b的首地址往后32位打印数据。
[/Quote]
顶这个
Paradin 2009-03-30
  • 打赏
  • 举报
回复
printf("%d %d\n", a , b);

%d认为数据只有32位,于是从b的首地址往后32位打印数据。

用ld试试
  • 打赏
  • 举报
回复
printf("%d %d\n", a , b);

可以这样理解吧,%d认为数据只有32位,于是从b的首地址往后32位打印数据。
wohow 2009-03-30
  • 打赏
  • 举报
回复
long long int使用%ld来打印,使用%d打印4个字节的int,所以上面的程序第二个int为0,实际上是a的高4个字节
wohow 2009-03-30
  • 打赏
  • 举报
回复
to yashuwa0622:
%llx
Paradin 2009-03-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
printf("%d %d\n", a , b);

可以这样理解吧,%d认为数据只有32位,于是从b的首地址往后32位打印数据。
[/Quote]
.
yashuwa0622 2009-03-30
  • 打赏
  • 举报
回复
用 %I64D试了下,好像不行啊,它解释成 %i 64D了;另外,如果将1个64位数用16进制打出来怎么打?
arong1234 2009-03-29
  • 打赏
  • 举报
回复
这和扩展好似没啥关系吧?只是楼主用错了格式描述符而已

[Quote=引用 3 楼 mengde007 的回复:]
VC的扩展性不是很好,对于64位他还是不能很好的解决
[/Quote]
mengde007 2009-03-29
  • 打赏
  • 举报
回复
printf("%i64d %i64d\n", a , b);这样是可以的
mengde007 2009-03-29
  • 打赏
  • 举报
回复
VC的扩展性不是很好,对于64位他还是不能很好的解决
arong1234 2009-03-29
  • 打赏
  • 举报
回复
把%d换成%i64或者%ld之类的,看printf帮助找答案
arong1234 2009-03-29
  • 打赏
  • 举报
回复
主要是%d和long long不匹配,看看http://blog.csdn.net/arong1234/archive/2008/05/18/2456455.aspx

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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