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一样溢出? 展开
Dim buffer2 As Long
buffer1 = 169 + 202645
buffer2 = buffer1 + 1279 * 140
运行,溢出?何解?赋初值无用,是长整型中出现乘法运行就认为溢出?
修改后 buffer2=buffer1 + 179060一样溢出? 展开
3个回答
展开全部
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在运算时按长整型进行运算,就不会溢出了
其范围从 -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在运算时按长整型进行运算,就不会溢出了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
buffer2=buffer1 + 179060 '不会溢出
1279 * 140
因为系统是用最合适的数据类型来给一个没有指定数据类型的数据进行匹配,所以,这两个数,都被匹配成整型
这样运算出来的结果,>32767,所以会溢出
你可以这样用 clng(1279) * 140 这样就不会了
1279 * 140
因为系统是用最合适的数据类型来给一个没有指定数据类型的数据进行匹配,所以,这两个数,都被匹配成整型
这样运算出来的结果,>32767,所以会溢出
你可以这样用 clng(1279) * 140 这样就不会了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这应该是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
这样就不会溢出了。
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
这样就不会溢出了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询