当前位置: 代码迷 >> C语言 >> 初学,显示结果的问题?
  详细解决方案

初学,显示结果的问题?

热度:178   发布时间:2006-07-31 23:48:41.0
初学,显示结果的问题?
#include "stdio.h"
main()
{
long a=40000 ;
printf("%d ",a);
getch();
}


为什么运行后的结果是-25536啊?我是自学加初学,今天是刚学第二天,所以请各位不要见笑!
搜索更多相关的解决方案: 结果  初学  

----------------解决方案--------------------------------------------------------
#include "stdio.h"
main()
{
long a=40000 ;
printf("%l ",a);
getch();
}
虽然我没有在本机调试过,但我觉得问题就是这个。
----------------解决方案--------------------------------------------------------
以下是引用greess在2006-8-1 0:18:17的发言:
#include "stdio.h"
main()
{
long a=40000 ;
printf("%l ",a);
getch();
}
虽然我没有在本机调试过,但我觉得问题就是这个。

多谢指教!
不过按你写的,结果却是L%.把"%l ",改成"%ld ",就可以了。


----------------解决方案--------------------------------------------------------

其实这种问题我原来初学的时候老师就让我们不要去管它,这种是你变量LONG的范围问题样??


----------------解决方案--------------------------------------------------------
类型不对而已

lomg 的40000已经超过int 表示的范围(-32767---32768)
于是当你用int输出long 型数时,系统自动截取低16位输出。
long (40000)D=(00000000000000001001110001000000)B
故输出(1001110001000000)B (二进制补码表示值)

原码为1110001111000000=(-25536)D
----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2006-8-1 9:59:47的发言:
类型不对而已

lomg 的40000已经超过int 表示的范围(-32767---32768)
于是当你用int输出long 型数时,系统自动截取低16位输出。
long (40000)D=(00000000000000001001110001000000)B
故输出(1001110001000000)B (二进制补码表示值)

原码为1110001111000000=(-25536)D

十分感谢你的分析!
----------------解决方案--------------------------------------------------------

以下是引用nuciewth在2006-8-1 9:59:47的发言:
类型不对而已

lomg 的40000已经超过int 表示的范围(-32767---32768)
于是当你用int输出long 型数时,系统自动截取低16位输出。
long (40000)D=(00000000000000001001110001000000)B
故输出(1001110001000000)B (二进制补码表示值)

原码为1110001111000000=(-25536)D



----------------解决方案--------------------------------------------------------
lihai
----------------解决方案--------------------------------------------------------

  相关解决方案