tags:

views:

78

answers:

2

I have a System.Collections.BitArray array (~3000 items) and I would like to shift all the bits to the left by 1. However the collection doesn't seem to support that operation (i.e. bitArray << 1 not working and there is no method). Any idea on how to do that?

Thanks!

+1  A: 

This simple snippet shows a manual way to do it. The value of bitArray[0] is overwritten:

//... bitArray is the BitArray instance

for (int i = 1; i < bitArray.Count; i++)
{
   bitArray[i - 1] = bitArray[i];
}

bitArray[bitArray.Count - 1] = false // or true, whatever you want to shift in

Making this an extension method shouldn't be a big deal.

Frank Bollack
That great... but slow. I though there would be a special operator or method since we are playing with bits.
Martin
You can go the long way of copying the content from your `BitArray` to a `bool[]` and than copy the data to another `bool[]` using offsets. Finally you could recreate your `BitArray` from the resulting `bool[]`. But I doubt it will be faster than accessing each element for your ~3000 bits.
Frank Bollack
A: 

The easiest way I'd go for off the top of my head is to convert the BitArray to a BigInt or similar structure that supports bitwise shifting and back. Now, the built-int BigInteger in .Net 4 doesn't support shifting I think, but there are others that do, like Mono's implementation.

Alex Paven