vb 中的溢出

为什么这个会显示错误6,溢出呢?dima&a=200*200printa为什么当a=2*2时不会呢??如果变成x=200y=200a=x*yprinta这样就不会溢出..... 为什么这个会显示 错误6,溢出呢?

dim a&
a=200*200
print a

为什么 当a=2*2 时不会呢??
如果 变成
x=200
y=200
a=x*y
print a

这样就不会溢出..
是什么原因!求指点!
展开
 我来答
百度网友3090e3741
推荐于2016-05-07 · TA获得超过2916个赞
知道小有建树答主
回答量:401
采纳率:0%
帮助的人:257万
展开全部
在VB中整数Integer默认只有2字节,也就是表大范围只能从-32768 ~ +32767,而200 * 200已经达到了40000,超出了Integer的表达范围,所以出错了。

其实,200*200就会出错,因为200被解释为Integer,乘法后还是Integer,所以就算a是double类型,a = 200*200还是会报溢出。

所以,其实第一报错看是a的问题,其实还没有运行到将积赋值给a就出错了,不信你修改为:
dim a as double
a =200*200
print a
一样报告溢出

如果代码是这样的:
dim a as integer
a =200*200.0
print a
这时候200(整数)和200.0(双精度浮点)运算,得到双精度浮点,就不会报错了,但是当把40000.0赋值给整数a时,会报告溢出。

如果改成x=200,y=200
x和y是可变类型,可变类型可以接受大整数,所以没有报告溢出
追问
但是&是长整型喔!不是整型!
追答
问题是出在200*200,而不是a
你可以这样来理解:其实系统在处理计算时,200*200得到一个临时结果,然后将这个临时结果赋值给a。而这个临时结果和200一样,都是integer,所以200*200计算结果给临时结果时就发生了溢出,所以溢出与a无关
dim a as double
a =200*200
照样发生溢出错误

所以你这样修改:
dim a as long
a = 200& * 200
百度网友62f46f970
2011-03-03
知道答主
回答量:55
采纳率:0%
帮助的人:17.3万
展开全部
数据类型的问题
上面的a为单精度型
单精度型最大 32767
而你的a=200*200 结果是40000
这样就出现了溢出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
equonn
2011-03-04 · TA获得超过183个赞
知道答主
回答量:299
采纳率:0%
帮助的人:190万
展开全部
(TxFrame(0) + TxFrame(1) + TxFrame(2) + TxFrame(3) + TxFrame(4) + TxFrame(5) + TxFrame(6) + TxFrame(7)) And &HFF
的计算过程是:TxFrame(0)=TxFrame(0) + TxFrame(1),这样算几次肯定会溢出的,建议你另外定义一个Integer变量做中间变量。

Dim temp As Integer
TxFrame(0) = &HC1
TxFrame(1) = &H33
TxFrame(2) = &HF1
TxFrame(3) = &H23
TxFrame(4) = 0
TxFrame(5) = &H33
TxFrame(6) = &H33
TxFrame(7) = &H1

temp = (TxFrame(0) + TxFrame(1) + TxFrame(2) + TxFrame(3) + TxFrame(4) + TxFrame(5) + TxFrame(6) + TxFrame(7)) And &HFF
TxFrame(8)=temp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式