找到右移量以将位索引映射到位数组中的缓冲区索引

时间:2018-12-10 15:02:07

标签: c bit bitarray

我正在基于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的正确方法吗?有这个宏吗?您将如何实施?好像我缺少什么。

0 个答案:

没有答案