Битовая маска для индексации массива - PullRequest
3 голосов
/ 30 марта 2009

Есть ли простой способ преобразовать битовую маску в индекс массива?

т. Если у меня есть перечисление

a = 0x01,
b = 0x02,
c = 0x04,
d = 0x08,
e = 0x10, 
etc

и я хочу сохранить освобожденные данные в массиве, есть ли простой способ, позволяющий преобразовать a в 0, b в 1, c в 2. и т. Д.

Большое спасибо

Ответы [ 5 ]

6 голосов
/ 30 марта 2009
r =   ln base 2 
and programmatically,

unsigned int v=yourEnumValue;
unsigned r = 0; 
while (v >>= 1) 
{
   r++;
}

r is your answer
4 голосов
/ 30 марта 2009

Я не уверен, что это то, о чем вы спрашиваете, но почему бы вам просто не взять 2-базовый журнал?

3 голосов
/ 30 марта 2009

Log 2 n?

1 голос
/ 30 марта 2009

Используйте стандартную карту :: map:

#include <map>

std::map <my_enum, my_datatype> m;
m[ a ] = whatever;
1 голос
/ 30 марта 2009

Я не знаю простого решения, как вы просили, но почему бы просто не использовать карту вместо массива?

Должно работать без какого-либо магического преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...