簡體   English   中英

VBA for-loop,基數為2的增量

[英]VBA for-loop with base 2 increment

為了識別位掩碼值的內容,我需要一個有效的VBA解決方案來迭代各種可能性(1,2,4,8,...跳過它們之間的任何東西)

現在我唯一的解決方案是迭代整個范圍並檢查當前迭代是否是基數為2的數字

For i = ErrorType.[_First] To ErrorType.[_Last]
  If isBase2(i) Then
    ...
  End If
Next i

我正在考慮這個Java代碼片段的內容

for(int i = 0; i < x; i = Math.pow(2, i++)) {
  ...
}

但是我還沒有能夠在VBA中復制它而不會導致無限循環。

在java中,更多地考慮for (int i = 1; i <= x; i <<= 1)

這樣,如果我們嘗試將其轉換為vba並記住vba中沒有變化,我們可以通過將相同的邏輯重構為帶有乘法的while循環來達到類似的效果:

Dim i As Integer
i = 1

Do While i <= x
    i = i * 2
Loop

我要記住,僅僅為了找到2的力量,戰俘是相當昂貴的。 只需在循環之前將0作為單獨的大小寫處理,並避免所有比較。 無論如何,VBA並不是最有效的平台,所以保持簡單通常是要走的路。

Dim pow As Long
Dim i As Long
For pow = -1 To 4 'or however high you want to go
    If pow = -1 Then
         i = 0 ' Special case: 0 isn't a power of 2
    Else
         i = 2 ^ pow
    End If
    Debug.Print i
Next pow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM