关于溢出的小问题。本帖最后由 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