刚刚帮一个朋友调试一个串口数据处理的小程序,问题是"溢出".
他的代码是这样:
analyze = Format((data(1) * 255 ^ 3 + data(2) * 255 ^ 2 + data(3) * 255 + data(4)) / 1000, "#.0000")
其中,analyze已经是Double型,data()是byte型.
实际运行时,仍然报溢出错误.
由于我这里没有设备,无法跟踪,就只能分析了.
首先,byte类型最大值是255,而第一个式子,"data(1) * 255 ^ 3",最大也就是255的四次方,为4228250625.
而Double型变量在正数时,可以达从4.94065645841247E-324 到 1.79769313486232E308.
大了很多倍,理论上是不可能会溢出的啊!
突然想起了一个默认类型的问题.
"data(1) * 255 ^ 3",它返回的,是什么类型的呢?
查MSDN,没查到.
于是马上在IDE里按Ctrl + G调出立即窗口,输入:
? 255 * 255
想试一下.
结果一回车,溢出! 
经测试,255*128时,值为32640,没事;
大于128,比如129,就溢出了.
看来这VB的默认类型是Integer呀,HOHO~~
然后再改了一下代码,变成如下:
? clng(255) * clng(255)
回车,返回65025,正常了.
问题确认了,于是就回复了朋友我的分析.
虽然他已经下了,不过我想应该是可以正常工作了吧,HOHO 
一点多了,睡觉...........明天还得上班
PS:
今天公司的机器也算是搞清楚了一个大问题了.
明天就要总调试机了.祝我们成功!! 
这种机器,应该是全中国的第一台吧,哇哈哈哈哈哈哈哈~~~ 
[本日志由 马大哈 于 2007-06-07 01:20 AM 编辑]
|