请各位高手不吝赐教关于c语言printf函数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 17:30:25
有如下一段程序:
#inlucde"stdio.h"
main()
{
long t=46368;
printf("%d\n",t);
printf("%ld\n,t);
getch();
}
两个输出函数尽管只差了一个“l”,但前一个输出为:-19168,而后一个输出才为:46368,我们都知道在%d之间加一个"l",表示结果以长整形输出,但有那位高手知道如果不加"l",-19168这个数是怎么得到的,是不是超过32768后截取的或者是什么别的原因,还请大虾不吝赐教,写出详细原因,菜鸟多谢了!

溢出了所以成了负数。INT16的最大值是32767
整形数据在内存中是以补码的形式保存的,
46368的二进制是 1011010100100000,也就是-19168的补码。你也可以看到,它的符号位是1

我记得是随即的,但是看你这数字好象是减65536得的。。。。。。。长整形的上限是65536