我如何实现位数组?
当前方向:
使用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
代替。 消除浮动怪异的任何可能性,它也可能表现更好。