Да, вы преобразовываете число в двоичное. Например, двоичное значение 64: 1000000. Так как 1 находится в седьмом положении вы знаете требуемое значение 7. Вот Visual Basic программа, чтобы сделать это:
Public Function DecimalToBinary(DecimalNum As Long) As String
Dim tmp As String
Dim n As Long=
n = DecimalNum
tmp = Trim(Str(n Mod 2))
n = n \ 2
Do While n <> 0
tmp = Trim(Str(n Mod 2)) & tmp
n = n \ 2
Loop
DecimalToBinary = tmp
End Function
В этом алгоритме значения добавляются в строку, но вы можете просто сохранить их в массиве из 1 и 0. Также обратите внимание, что вы всегда можете получить мощность двух по длине строки, созданной алгоритмом выше. Например, длина строки «1001010» равна 7, что означает, что число находится между 64 и 127.
Есть очень быстрые пустяковые способы для логарифмов базы 2. У меня есть версия aC# (не Basic), но вы можете увидеть некоторые алгоритмы здесь: http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogLookup – hatchet