c程序long转int输出问题求解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c程序long转int输出问题求解相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
void main()
long int m,n;
scanf("%ld,%ld",&m,&n);
printf("m=%d,n=%d\n",m,n);
输入:50000,-60000
vc6.0:m=50000,n=-60000
正解应该是:m=-15535,n=5536
用tc2.0/3.0:m=-15535,n=0
为什么,第2个数字出问题
我把-60000赋给第一个变量,相应的值就没错;不过第2个老是0。。。。。这是怎么回事?在这拜谢!!
代码,本身没问题。。。
我用按步动态分析过。。。m,n最后的值没有问题
问题在printf里,第一个值总是对的,第2个不是0就是-1;如果是long不能用%d输出,那第一个也应该是错的,既然第一个可以输出。。。
那为什么第2个不行呢?希望有人可以给个比较专业的解释,不要说是编译器的问题。。。
---------------------------------
实在不能理解你在测试什么或者寻找什么?
你不会打算用printf来做强制转换吧,%d<--m发生了错误,所以影响了下个%d的转换(我分析的),你可以这样去测试
printf("%d,%d,%d,%d",m,1,n,1)可以看出来了吧,我不清楚TC是否有编译指令来控制错误也继续执行下去.
我认为还是这么写printf("%d,%d",(int)m,(int)n)这样才对啊,先强制转换再做打印.
VC,delphi,C++Builder中的int(integer)为signed 32-bit相当于TC的long所以输出50000 -60000没啥问题.
而且正确输出应该是 -15536 -5536吧! 参考技术A 那就用长整型输出呗,应该是long int那里的问题。
用高位记录数值,所以低位全零呀。
好象也不是……楼上比较专业呀~~
如何避免 Gson 将 JsonString 中的 int long 等数字转化为带小数的 Double
参考技术A 在将 json 串转为 Map<String, Object> 时内部的类似 page=1, limit=10 等int类型数据会被转换为 Double,输出 page=1.0, limit = 10.0
而类似 timestamp=1231231231231 等 long 类型也会被转换为 Double,输出 1exxxx(科学计数法)
Gson 2.8.4 包含的这个提交 解决了这个问题,它允许我们指定数字类型如何被转换。
以上是关于c程序long转int输出问题求解的主要内容,如果未能解决你的问题,请参考以下文章