首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于溢出的小疑点

2013-01-09 
关于溢出的小问题。本帖最后由 cnmjze 于 2012-12-15 15:47:43 编辑dim he as double,a as byte ,b as byte

关于溢出的小问题。
本帖最后由 cnmjze 于 2012-12-15 15:47:43 编辑 dim he as double,a as byte ,b as byte ,c  as byte ,d as byte
a=100
b=200
c=210
c=220

he=a
he=he + b *256 +c *256 * 256 + d * 256 * 256 *256

运行到  he=he + b *256 +c *256 * 256 + d * 256 * 256 *256  语句处时  提示 “溢出”

请问如何处理。


[解决办法]
本帖最后由 bcrun 于 2012-12-21 11:30:09 编辑

Dim he As Double, a As Byte, b As Long, c As Long, d As Long
a = 100
b = 200
c = 210
c = 220

he = a
he = he + b * 256 + c * 256 * 256 + d * 256 * 256 * 256


[解决办法]
d * 256 * 256 *256>2^31

d=200

VB long数据不能大于2^31


[解决办法]
前面的声明换成这样Dim he As Double, a As Double, b As Double, c As Double, d As Double
问题解决了~,已运行通过~
[解决办法]
Dim he As double, a As byte , b As byte, c  As byte , d As byte
a = 100
b = 200
c = 210
d = 220

he = d
he = he * 256
he = he + c
he = he * 256
he = he + b
he = he * 256
he = he + a

[解决办法]
出错的原因是VB6中默认整数运算数据类型是integer,范围是-32768到32767,你的运算中间结果如果超过这个范围而又没有指定数据类型的话,那就会溢出而出错,例如你代码中大量使用了XX * 256,那么只要XX大于128或小于-128都会溢出,更不用说还有好几个256相乘.

这种情况下,可以指定运算中的中间结果变量类型,方法是将运算符左边的数值转化为更大范围的类型(如Long),因为同级运算中,最左边数据的类型将是最终的结果类型.

具体到你的代码,上面各位都是可以解决的.

我这里再给出另一种方法:

he=he + b *256 +c *256 * 256 + d * 256 * 256 *25
改为:
he=he + cdbl(b) *256 +cdbl(c) *256 * 256 + cdbl(d) * 256 * 256 *25

热点排行