Так что я получаю неподписанный int, переданный в мою функцию. Теперь я должен получить n младших битов этого целого числа и использовать его для доступа к местоположению в массиве размера 2^n
,
Так, например, если мой массив имеет размер 1024, n = 10.
В настоящее время я делаю это:
unsigned int location = my_unsigned_int << n;
Однако это не работает как location
в конечном итоге слишком велик и выходит за пределы.
Вы можете просто замаскировать нужные биты:
unsigned int location = my_unsigned_int & ((1<<n) - 1);
Это предполагает, что ваш int
по крайней мере n+1
биты в размере.
Других решений пока нет …