vb 中的溢出
答案:3 悬赏:60 手机版
解决时间 2021-01-13 07:33
- 提问者网友:川水往事
- 2021-01-13 02:17
vb 中的溢出
最佳答案
- 五星知识达人网友:等灯
- 2021-01-13 03:42
在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
其实,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
全部回答
- 1楼网友:神鬼未生
- 2021-01-13 05:50
数据类型的问题
上面的a为单精度型
单精度型最大 32767
而你的a=200*200 结果是40000
这样就出现了溢出。
上面的a为单精度型
单精度型最大 32767
而你的a=200*200 结果是40000
这样就出现了溢出。
- 2楼网友:撞了怀
- 2021-01-13 04:47
(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
的计算过程是: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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯