【发布时间】:2011-08-25 07:26:52
【问题描述】:
当前方向:
以 unsigned char 开头,在我的系统上使用 sizeof 为 1 字节。范围是 0-255。 如果 length 是我需要的位数,那么 elements 就是我在数组中需要的元素(字节)数。
constant unsigned int elements = length/8 + (length % y > 0 ? 1 : 0);
unsigned char bit_arr[elements];
现在我添加了基本功能,例如设置、取消设置和测试。其中 j 是每字节的位索引,i 是字节索引,h = 位索引。我们有 i = h / 8 和 j = i % 8。
伪代码:
bit_arr[i] |= (1 << j); // Set
bit_arr[i] &= ~(1 << j); // Unset
if( bit_arr[i] & (1 << j) ) // Test
【问题讨论】:
-
避免“战俘”。请改用位移位 > 运算符。 (1
-
我不知道你可以使用位移来做到这一点。谢谢。
-
没有什么可以保证一个字节 == 8 位。它可能因平台/CPU而异。 IIRC CHAR_BITS将告诉您char中有多少位(这与 C 中的字节相同,顺便说一句——它被定义为最小的可单独寻址的内存单元)。 -
if( bit_arr[i] &= pow(2,j) )测试错误,使用&而不是&=。