为啥输出时c=16,d=0

为什么输出时c=16,d=0?
初学者,见谅
#include<stdio.h>
int main()
{
 long i=10,j=9;
 int a=6,b=7;
 printf("c=i+a=%d d=j+b=%d",i+a,j+b);
 return 0;
}
c 输出结果 类型

------解决方案--------------------
不好意思,上面把大小端弄反了!

Turbo C++, 是16位的吧,这个就容易解释了, 由于int是16位,long是32位
看看栈的情况就知道了!


printf("c=i+a=%d d=j+b=%d",i+a,j+b);

          
------解决方案--------------------
------
------解决方案--------------------
-----栈顶
c(int )---
------解决方案--------------------
0x0010
------解决方案--------------------
--
          
------解决方案--------------------
------
------解决方案--------------------
 
------解决方案--------------------
-- i + a = 16 (long)
d(int )---
------解决方案--------------------
0x0000
------解决方案--------------------
--
          
------解决方案--------------------
------
------解决方案--------------------

          
------解决方案--------------------
0x0010
------解决方案--------------------
--
          
------解决方案--------------------
------
------解决方案--------------------
 
------解决方案--------------------
-- j + b = 16 (long)
          
------解决方案--------------------
0x0000
------解决方案--------------------
--
          
------解决方案--------------------
------
------解决方案--------------------


printf("c=i+a=%ld d=j+b=%ld",i+a,j+b);

          
------解决方案--------------------
------
------解决方案--------------------
-----栈顶
        --
------解决方案--------------------
0x0010
------解决方案--------------------
--
c(long)-
------解决方案--------------------