Как использовать битовое представление для доступа к индексируемой структуре данных
При наличии индексируемой структуры данных, скажем 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