2010-07-30 29 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),它的做法是一樣的,只是結果會很長,所以不會發生溢出。