C语言中int数据用"%ld"输出,结果很费解,哪位高手说下它的原理?

main()
{int a;
scanf("%d",&a);
printf("%ld\n%lu\n",a,a);
}
高十六们补什么,能说一下原理吗?
这个问题我试过好多次,有符号输出高十六位补低十六位本身,也就是高低一样,无符号输出,高十六位补1111 1111 1101 1110 B,如果说高十六位使用了不属于自身的存储单元,那么里面的数值是不确定的,又为什么每次运行所得数据还是一样?32767试我用32767与-过.
还望高手们再指点一下,小弟在此先谢过了!

如果是用%ld和%lu,最好在之前用long 来定义数据的类型,另外,长整型的数在tc中是4个字节的,如果不是用非常大的整数时最好使用int 因为这些数据定义后会占用字节的,所以不需要很大的数时就用占字节少的来定义。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-06-27
如果是用%ld和%lu,最好在之前用long 来定义数据的类型,另外,长整型的数在tc中是4个字节的,如果不是用非常大的整数时最好使用int 因为这些数据定义后会占用字节的,所以不需要很大的数时就用占字节少的来定义。
第2个回答  2006-06-26
%ld -- 十进制长整数型输出。
%lu -- 十进制长无符号整数型输出。

用负数,就能看到ld,lu的区别。
长整数型数的位数由编译器种类决定。本回答被网友采纳
第3个回答  2006-06-26
不补什么,内存里是什么就是什么

也就是说,你使用了不属于你的内存空间。