处理超过Long的整数

时间:2010-08-04 05:22:58

标签: vb6 overflow

我有以下代码:

Dim L as Integer
Dim R as Integer
Dim a as Integer

a=((L+R)/2)

现在(L+R)超出了Integer的限制。 为了处理这种情况: 我有以下三种选择:

  1. 将L(或R)定义为Long
  2. 撰写a= ((CLng(L)+R)/2)
  3. 将新变量声明为Long
  4. 喜欢这个

    Dim S as Long
    S=S+L+R
    

    我很困惑哪一个最好实现?

2 个答案:

答案 0 :(得分:1)

将所有变量更改为Long

  • 代码将更强大
  • 代码将执行得更快
  • 每个变量的额外2个字节的内存完全无关紧要,除非您同时使用多个数百万个这些整数变量。

您已经在这里发布了几个关于整数溢出错误的问题。尽管如此,我还是建议您将所有您的Integer变量更改为Long并继续编码。

答案 1 :(得分:0)

我选择#2。我认为(不确定)它使用比#1少一点的内存,因为在等式中只有一个长值,其中将L或R更改为Long将需要2个Long值的空间。

我认为#2和#3可能在编译后看起来相同(或非常接近),我个人认为在这种情况下,额外的变量不会使它更具可读性。不同的是,在#2中,L + R的结果可能不需要保存在任何地方,但只能在寄存器之间移动以进行计算。

我在这里想的很多,但我发布这部分是因为我希望如果我错了,有人会纠正我。无论如何,根据上面的推理,我会选择#2。编辑:至少我很确定如果其中一个选项使用的内存少于其他选项,那么它是#2,但在这方面它们可能都是相同的。