2010-07-30 31 views
1

比方说,我有什么阵列Trial() As Integer
我有以下两个变量定义为整数:内部分配VB

Dim Left As Integer 
Dim Right As Integer 

现在我增加审判的数组索引

ReDim Preserve Trial(Left+Right) 

现在如果我总数(左+右)超过整数限制,以上将给出错误。
而且,如果重新声明左为长,那么它会正常工作。

其实我想了解(左+右)的内部计算。
是否根据“左”的数据类型分配总空间?
或者它也可能取决于“正确”的数据类型?

回答

1

它取决于两者。编译器将检查两个变量,并从两者中确定它需要的数据类型。例如。如果你要添加(或多个或分开)Integer和Long,那么结果会给你很长的时间。

+0

+1。另外值得一提的是,它只看当时正在进行的计算。所以'CLng(Left)*(Left + Right)'仍然会让你在“Left + Right”上出现溢出,因为它将这部分视为整数。到达CLng(Left)*时,它会扩展到Long。 – MarkJ 2010-07-30 08:08:58

0

计算Left + Right是假设结果也是一个整数,也就是发生溢出的地方。

如果你先去CLng(Left) + CLng(Right),它的做法是一样的,只是结果会很长,所以不会发生溢出。