我如何实现位数组?

时间:2011-05-13 23:04:11

标签: c arrays bit

当前方向:

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

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

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

Psuedo-Code:

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

2 个答案:

答案 0 :(得分:6)

看起来你非常清楚需要做什么。虽然代替pow(2, j),但请使用1 << j。您还需要更改test代码。您不希望测试对数组进行分配。

答案 1 :(得分:2)

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

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