2017-02-12 2 views
0

Итак, я получаю unsigned int, переданный в мою функцию. Теперь я должен получить n бит LSB этого целого числа и использовать его для доступа к местоположению в массиве размером 2^n.Получить n LSB от Integer C++

Так, например, если мой массив размером 1024, п = 10.

В настоящее время я делаю это:

unsigned int location = my_unsigned_int << n; 

Однако это не работает, как location заканчивает тем, что слишком большой и вне пределов.

+0

Сначала попробуйте сделать это на бумаге, чтобы убедиться, что вы правильно поняли. И чтобы дать вам подсказку, вам нужно * замаскировать * бит верхнего уровня. –

ответ

2

Вы можете просто маскировать биты вы хотите:

unsigned int location = my_unsigned_int & ((1<<n) - 1); 

Это предполагает, что ваш int, по крайней мере n+1 бит размера.

+0

Я думаю, вы имеете в виду только один '&', потому что '&&' не побито – theKidOfArcrania

+0

@theKidOfArcrania: Я думаю, что вы правы. –

+0

Это дает мне ошибку «предложить круглые скобки вокруг» - «внутри <<» – Alk

Смежные вопросы