注册 登录
编程论坛 VB6论坛

敬请讲解关于溢出的问题

happytwosky 发布于 2016-04-15 10:56, 1904 次点击
Private Sub Command1_Click()
Dim x As Integer, y As Integer, color As Integer
For x = 100 To 4000
  y = Fix(x / 3)
  color = Fix(255 * (x + 2500) / 4000)
  Pic.Circle (Pic.Width - x, y), (x + 100) / 7, RGB(255, color, 130)
  Next x
End Sub
在运行时一直提示color这里溢出,不知什么原因
3 回复
#2
xiangyue05102016-04-15 11:20
怀疑是你的数太大了,超过了Integer的上限(这个你去百度一下,具体数值我记不住了)
换成长整型,Long 试试
#3
风吹过b2016-04-15 11:22

Dim  color As Integer
'保存 16 位(2 字节)有符号整数,值的范围为 -32,768 到 32,767

  color = Fix(255 * (x + 2500) / 4000)

这里,表达式中,所以的常数也都未超过 integer 的范围,根据默认范围,所有的数据全部被表达为 integer。
根据运算法则,数据类型最高为 integer ,整个运算都在 integer 的范围内运算。
我们再来看运算结果。
X是 100 -4000,我们先用最小值,100 来 代入表达。变成了
255*(100+2500)/4000
表达式运算是从左到右计算,与编译不同,编译是从右到左。
=255*2600/4000
=663000/4000                    '这步,663000,超范围了,所以这里报溢出
下一步就不会计算了,直接报前面这一行的错误。


#4
happytwosky2016-04-15 14:23
回复 3楼 风吹过b

谢谢风大,俺还以为是只要结果范围在integer的范围之内,就可以了!
1