Битовая маска для индекса массива
Вопрос
Есть ли простой способ преобразовать битовую маску в индекс массива?
то есть.Если у меня есть перечисление
a = 0x01,
b = 0x02,
c = 0x04,
d = 0x08,
e = 0x10,
etc
и я хочу сохранить связанные данные в массиве, есть ли простой способ преобразовать a в 0, b в 1, c в 2.и т. д?
Большое спасибо
Решение
r = ln base 2
and programmatically,
unsigned int v=yourEnumValue;
unsigned r = 0;
while (v >>= 1)
{
r++;
}
r is your answer
Другие советы
Я не уверен, что вы об этом спрашиваете, но почему бы вам просто не взять двухбазовый журнал?
Бревно2 н?
Я не знаю простого решения, о котором вы просили, но почему бы просто не использовать карту вместо массива?
Должно работать без каких-либо магических преобразований.
Используйте std::map:
#include <map>
std::map <my_enum, my_datatype> m;
m[ a ] = whatever;
Не связан с StackOverflow