8030铝合金 特点:c输出的问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 08:04:57
是个关于c中长整形数据的问题,比如运行
main()
{
long i=333330;
printf("%d %ld\n",i,i);
printf("%ld %d\n",i,i);
}
输出的时候结果是:
5650 370278405
333330 5650
有人知道是怎么回事没?
再说一句,我用的是TURBOC2.0
谁在TURBOC2.0上运行正常了给说一下.谢谢
[1] L_o_o_n_i_e 你好:
应该能处理long,看输出有一行能正确的显示啊.输出的时候结果是:
5650 370278405
333330 5650
[2] 细露 你好:
你的思路目前看比较的合理,就是Long上出了问题,当初我也想过,可是具体怎么的没想出来.

long i=333330; //i为长整形
printf(\"%d %ld\\n\",i,i);
printf(\"%ld %d\\n\",i,i);
}
输出的时候%d为输出整形
整形的最大表示范围是-32768-32767
333330超出了它所能表示的范围,溢出。它的二进制0101 0001 0110 0001 0010 高两字节溢出,变成0001 0110 0001 0010 即5650,输出370278405是由于高低两字节反转了,变成0001 0110 0001 0010 0000 0000 0000 0101。原因...还是不知道

把你的程序save as a.c
VC++ 下调试没有问题, 显示正常.

我的版本:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998.
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998.

D:\zzz\cl a.c
/out:a.exe
a.obj

D:\zzz>a
333330 333330
333330 333330
===========================

你的编译器版本老了,不会处理长整数。

long i=333330; //i为长整形
printf("%d %ld\n",i,i);
printf("%ld %d\n",i,i);
}
输出的时候%d为输出整形
整形的最大表示范围是-32768-32767
333330超出了它所能表示的范围,益出。
我就知道这了

至于printf("%d %ld\n",i,i); 为什么会打印5650 370278405
我实在不知道
关注中

在WINXP+VC6下调试没有问题, 显示正常,

你的环境是不是不支持更长的数据类型.

LONG在不同的操作系统下长度是不同的.