Нахождение количества правых сдвигов для отображения битового индекса на индекс буфера в битовом массиве - PullRequest
0 голосов
/ 10 декабря 2018

Я делаю свою собственную реализацию битового массива в C на основе Java BitSet, где они используют 64-битный тип Long, но в C мы не можем гарантировать 64-битное целое число.Я определил integer_t, где я использую его везде в моем проекте:

typedef intmax_t integer_t;

Битовый массив представляет собой буфер integer_t, и следующая функция отобразит битовый индекс на индекс буфера:

static integer_t bit_buffer_index(integer_t bit_index)
{
    return bit_index >> bit_shifts;
}

Статический, потому что это деталь реализации.Также bit_shifts определяется в исходном файле как:

static const integer_t bit_shifts =
          ((sizeof(integer_t) * 8) >> 6) > 0
        ? 6
        : ((sizeof(integer_t) * 8) >> 5) > 0
        ? 5
        : ((sizeof(integer_t) * 8) >> 4) > 0
        ? 4
        : 3; // One byte

Но является ли это правильным подходом для определения bit_shifts?Есть ли для этого макрос?Как бы вы это реализовали?Кажется, я что-то упустил.

...