我如何实现位数组?

当前方向:

使用sizeof在我的系统上以1字节开头,并使用unsigned char。 范围是0-255。 如果length是我需要的位数,那么elements就是我在数组中需要的元素数(字节数)。

constant unsigned int elements = length/8 + (length % y > 0 ? 1 : 0); unsigned char bit_arr[elements]; 

现在我添加基本function,如set,unset和test。 其中j是每字节位数的索引,i是字节索引,h =位索引。 我们有i = h / 8和j = i%8。

Psuedo代码:

 bit_arr[i] |= (1 << j); // Set bit_arr[i] &= ~(1 << j); // Unset if( bit_arr[i] & (1 << j) ) // Test 

看起来你对需要做什么有很好的了解。 虽然不是pow(2, j) ,但使用1 << j 。 您还需要更改test代码。 您不希望测试对数组进行赋值。

pow()将为您提供您不想要的浮点值。 完全没有。 它可能对你有用,因为你使用2的幂,但随着j越来越大,它会变得怪异。

你可以更好地使用1 << j代替。 消除浮动怪异的任何可能性,它也可能表现更好。