Как использовать битовое представление для доступа к индексируемой структуре данных

При наличии индексируемой структуры данных, скажем vector = ['a','b','c'] размером n=3 и int i = 3, я хотел бы преобразовать 3 в его n-битное двоичное представление (011) и вернуть элементы ['b','c'] вектора. То есть для каждого 1 в двоичном представлении вернуть элемент в этом месте. Но как мне говорить о "местоположении" в двоичном числе? У меня проблемы с отображением одной идеи в другую. Любая помощь приветствуется.

1 ответ

Решение

Используйте битовое смещение, чтобы проверить каждый бит i:

 for(x=0; x<sizeof(int) * 8; x++)
 {
     if((i & (1<<x)) > 0)
     {
        // bit at position x is set in i
        add vector[i];          
     }
 }  

это приведет к

011 & 001  = 001 // true
011 & 010 =  010 // true
011 & 100 =  000 // false
.. etc
Другие вопросы по тегам