Я делаю свою собственную реализацию битового массива в 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
?Есть ли для этого макрос?Как бы вы это реализовали?Кажется, я что-то упустил.