2010-08-04 39 views
0

我有以下代碼:處理總整數超過長

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

贊這

Dim S as Long 
S=S+L+R 

我很困惑哪一個是最好的實現?

回答

0

我會選擇#2。我認爲(不確定)這是否使用少於#1的內存,因爲在等式中只有一個Long值,將L或R更改爲Long將需要2 Long值的空間。

我想#2和#3最終可能會在編譯後看起來相同(或非常該死的關閉),我個人認爲在這種情況下,額外的變量不會使它更具可讀性。當然不同的是,在#2中,L + R的結果可能不需要保存在任何地方,而只是在計算的寄存器之間移動。

我很想在這裏,但我發佈這部分是因爲我希望如果我錯了,有人會糾正我。無論如何,通過上面的推理,我會選擇#2。編輯:至少我可以肯定,如果其中一個選項使用的內存少於其他選項,它就是#2,但它們在這方面可能都是相同的。

+0

謝謝pkauko分享你的想法 – Pradeep 2010-08-04 06:10:32

+0

雖然我必須說我不會不贊同MarkJ,所以我會說你應該按照他的建議去做,假設你對記憶力不是很緊張(在這種情況下,你'd可能是用C或其他編碼編寫的),或者如他所說,這些變量有數百萬個實例同時使用。 – pkauko 2010-08-05 08:37:33

1

將所有變量更改爲Long

  • 該代碼將爲更可靠
  • 代碼將執行得更快
  • 每個變量額外的2個字節的內存是完全不重要,除非你有許多這些整數變量同時使用。

你已經在這裏發佈了幾個關於整數溢出錯誤的問題。在所有方面,我真的建議你只需更改全部你的Integer變量到Long並且繼續你的編碼。