Bitmask ao índice da matriz
Pergunta
Existe uma maneira simples para converter uma máscara de bits para um índice matriz?
ie. Se eu tenho um enum
a = 0x01,
b = 0x02,
c = 0x04,
d = 0x08,
e = 0x10,
etc
e eu quero armazenar dados releated em uma matriz, existe uma maneira simples de tal forma que eu posso converter uma a 0, b a 1, c a 2. etc?
Muitos agradecimentos
Solução
r = ln base 2
and programmatically,
unsigned int v=yourEnumValue;
unsigned r = 0;
while (v >>= 1)
{
r++;
}
r is your answer
Outras dicas
Eu não tenho certeza se é isso que você está perguntando, mas por que você não basta ter um log 2-base?
Log 2 n?
Eu não sei uma solução simples como você pediu, mas porque não basta usar um mapa, em vez de uma matriz?
deve funcionar sem qualquer conversão magia.
Use um std :: map:
#include <map>
std::map <my_enum, my_datatype> m;
m[ a ] = whatever;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow