我正在基于Java BitSet在C语言中实现自己的位数组,其中他们使用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
的正确方法吗?有这个宏吗?您将如何实施?好像我缺少什么。