请教一个除法问题

来源:百度知道 编辑:UC知道 时间:2024/05/11 12:30:51
我的程序里需要将周期转换为频率并显示,以下是转换过程的代码:
freq=100000000/time;
freqs[0]=freq/10000+48;
freqs[1]=freq%10000/1000+48;
freqs[2]=freq%1000/100+48;
freqs[4]=freq%100/10+48;
freqs[5]=freq%10+48;
其中time保存的是周期为long int型,freq也是long int型,freqs为char型。因为显示的时候用的是ASCII码,所以我在后
面加上48。
现在的问题是,当time大于3051时,显示结果正常,当time小于或等于3051时,就显示乱码了,当time等于3051时,显示的
内容从高位到低位依次为 -.)*0
请问各位大侠程序哪个地方出问题了?
补充一下,上面的变量都为无符号型

你的编译环境的问题
不知道为什么,你的long int 大小为16位,而且从你的程序运行方式上来看
虽然你说是无符号型,但是表现的是有符号

你可以用sizeof看看是不是这样
100000000/time 当 time<=3051的时候,结果大于0xFFFF/2,溢出
所以会显示乱码
把freq和time的声明改为unsigned long int就好了
其实同类型的除法要小心处置
然后后面在+48之前,最好能够强制类型转换一下

长整型的长度是16位(2个字节),最大是+2的15次方-1=32767,范围是-32768~+32767,当time等于3051时,freq应该是32776多,数据溢出了,而3052时,freq是32765,正好没溢出.
同样如果unsigned long int 的话范围是0~65535,你的time就可以取到1526以上都不溢出