我有以下代碼:處理總整數超過長
Dim L as Integer
Dim R as Integer
Dim a as Integer
a=((L+R)/2)
現在(L+R)
超過Integer
限制。 爲了處理這種情況: 我具有以下三個選項:
- 定義L(或R)爲
Long
- 寫
a= ((CLng(L)+R)/2)
- 聲明新的變量爲
Long
:
贊這
Dim S as Long
S=S+L+R
我很困惑哪一個是最好的實現?
我有以下代碼:處理總整數超過長
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
我很困惑哪一個是最好的實現?
我會選擇#2。我認爲(不確定)這是否使用少於#1的內存,因爲在等式中只有一個Long值,將L或R更改爲Long將需要2 Long值的空間。
我想#2和#3最終可能會在編譯後看起來相同(或非常該死的關閉),我個人認爲在這種情況下,額外的變量不會使它更具可讀性。當然不同的是,在#2中,L + R的結果可能不需要保存在任何地方,而只是在計算的寄存器之間移動。
我很想在這裏,但我發佈這部分是因爲我希望如果我錯了,有人會糾正我。無論如何,通過上面的推理,我會選擇#2。編輯:至少我可以肯定,如果其中一個選項使用的內存少於其他選項,它就是#2,但它們在這方面可能都是相同的。
將所有變量更改爲Long
。
你已經在這裏發佈了幾個關於整數溢出錯誤的問題。在所有方面,我真的建議你只需更改全部你的Integer
變量到Long
並且繼續你的編碼。
謝謝pkauko分享你的想法 – Pradeep 2010-08-04 06:10:32
雖然我必須說我不會不贊同MarkJ,所以我會說你應該按照他的建議去做,假設你對記憶力不是很緊張(在這種情況下,你'd可能是用C或其他編碼編寫的),或者如他所說,這些變量有數百萬個實例同時使用。 – pkauko 2010-08-05 08:37:33