VB中的一个小问题

Dimbuffer1AsLongDimbuffer2AsLongbuffer1=169+202645buffer2=buffer1+1279*140运行,溢出?何解?赋初... Dim buffer1 As Long
Dim buffer2 As Long
buffer1 = 169 + 202645
buffer2 = buffer1 + 1279 * 140
运行,溢出?何解?赋初值无用,是长整型中出现乘法运行就认为溢出?
修改后 buffer2=buffer1 + 179060一样溢出?
展开
 我来答
zxlxxl
2008-05-23 · TA获得超过630个赞
知道小有建树答主
回答量:928
采纳率:0%
帮助的人:484万
展开全部
Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,
其范围从 -2,147,483,648 到 2,147,483,647。
Long 的类型声明字符为和号 (&)

你在代码中有一个1279*140,溢出是因为VB在运算时遇到这样的数都会按最匹配的类型计算,这里因为1279和140都是整型,所以它会以整型进行运算,整型的 范围:-32767 到 +32768之间,因为1279*140=179060大于65535所以有溢出,要想正确计算,就要给其中一个数转换成长整型,或是范围大于179060的数据类型,

buffer2 = buffer1 + 1279& * 140

加上一个 & 就会让VB在运算时按长整型进行运算,就不会溢出了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
0871love
2008-05-23 · TA获得超过3518个赞
知道大有可为答主
回答量:1418
采纳率:50%
帮助的人:1612万
展开全部
buffer2=buffer1 + 179060 '不会溢出
1279 * 140
因为系统是用最合适的数据类型来给一个没有指定数据类型的数据进行匹配,所以,这两个数,都被匹配成整型
这样运算出来的结果,>32767,所以会溢出
你可以这样用 clng(1279) * 140 这样就不会了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lxz1969
2008-05-23 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8524
采纳率:33%
帮助的人:1.1亿
展开全部
这应该是VB中的一个bug。当把两个数字(整数)进行乘法运算时,VB会把它们当成integer,而不管你前面怎么定义。1279*140如果当成integer,结果肯定溢出。解决的办法是全部用变量。
Dim buffer1 As Long
Dim buffer2 As Long
Dim i as long ,j as long
i=1279
j=140
buffer1 = 169 + 202645
buffer2 = buffer1 + i* j
这样就不会溢出了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式