我有以下代码:
Dim L as Integer
Dim R as Integer
Dim a as Integer
a=((L+R)/2)
现在(L+R)
超出了Integer
的限制。
为了处理这种情况:
我有以下三种选择:
Long
a= ((CLng(L)+R)/2)
Long
:喜欢这个
Dim S as Long
S=S+L+R
我很困惑哪一个最好实现?
答案 0 :(得分:1)
将所有变量更改为Long
。
您已经在这里发布了几个关于整数溢出错误的问题。尽管如此,我还是建议您将所有您的Integer
变量更改为Long
并继续编码。
答案 1 :(得分:0)
我选择#2。我认为(不确定)它使用比#1少一点的内存,因为在等式中只有一个长值,其中将L或R更改为Long将需要2个Long值的空间。
我认为#2和#3可能在编译后看起来相同(或非常接近),我个人认为在这种情况下,额外的变量不会使它更具可读性。不同的是,在#2中,L + R的结果可能不需要保存在任何地方,但只能在寄存器之间移动以进行计算。
我在这里想的很多,但我发布这部分是因为我希望如果我错了,有人会纠正我。无论如何,根据上面的推理,我会选择#2。编辑:至少我很确定如果其中一个选项使用的内存少于其他选项,那么它是#2,但在这方面它们可能都是相同的。