2007 年 12 月
      1
2345678
9101112131415
16171819202122
23242526272829
3031   
上一年下一年   上一月下一月

站点统计
日志:516 篇
评论:331 篇
留言:31 篇
收藏夹:0 个书签
会员数:149 人

最新评论
上海地区广告伞太阳伞专业...
没附件了郁闷,还在的话麻...
已经发送到你的邮箱了,请...
写了一个进程间通讯的类....
行啊,二博客都一样
已经发送了附件到你的邮箱...
老马写的..可惜没的附件...
欢迎!
谢谢了。
第一次走进您的博客,^_...


一个比较隐蔽的溢出错误(VB6.0)   [ 2007-06-07 | 作者:马大哈 | 来自:本站原创]

刚刚帮一个朋友调试一个串口数据处理的小程序,问题是"溢出".

他的代码是这样:

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 编辑]
利用两个WebBrewoser控件实现取得"在新窗口打开"的网址 走吧,走吧....走好...

暂时没有评论