So, bitfields. Specifically, large bitfields. I understand how to manipulate individual values in a bitfield, but how would I go about doing this on a large set, such as say:
uint[] bitfield = new uint[4] { 0x0080000, 0x00FA3020, 0x00C8000, 0x0FF00D0 };
The specific problem I’m having is doing left and right shifts that carry through across the whole array. So for instance, if I did a >> 4 on the above array, I’d end up with:
uint[4] { 0x0008000, 0x000FA302, 0x000C800, 0x00FF00D };
Now, an (overly) simplistic algorithm here might look something like (this is me writting code on the fly):
int shift = 4; for (int i = 0; i <= shift; i++) { for (int j = bitfield.GetUpperBound(0); j > 0; j--) { bitfield[j] = bitfield[j] >> 1; bitfield[j] = bitfield[j] + ((bitfield[j-1] & 1) << (sizeof(uint)*8)); } bitfield[0] = bitfield[0] >> 1; }
Is there anything built in that might ease working with this sort of data?
What makes you think that BitArray uses bools internally? It uses Boolean values to represent the bits in terms of the API, but under the hood I believe it uses an int[].