How do I implement a bit array?

旧时模样 提交于 2019-12-11 10:48:10

问题


Current direction:

Start with and unsigned char which is 1 Byte on my system using sizeof. Range is 0-255. If length is the number of bits I need then elements is the number of elements (bytes) I need in my array.

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

Now I add basic functionality such as set, unset, and test. Where j is the bit per byte index, i is the byte index and h = bit index. We have i = h / 8 and j = i % 8.

Psuedo-Code :

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

回答1:


Looks like you have a very good idea of what needs to be done. Though instead of pow(2, j), use 1 << j. You also need to change your test code. You don't want the test to do an assignment to the array.




回答2:


pow() will give you floating-point values, which you don't want. At all. It might work for you, as you use powers of two, but it can get weird as j gets bigger.

You'd do a bit better to use 1 << j instead. Removes any chance of float weirdness, and it probably performs better, too.



来源:https://stackoverflow.com/questions/5998589/how-do-i-implement-a-bit-array

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!