为了识别位掩码值的内容,我需要一个有效的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中复制它而不会导致无限循环。
答案 0 :(得分:0)
在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并不是最有效的平台,所以保持简单通常是最佳选择。
答案 1 :(得分:0)
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