BitArray – Shift bits

Tengo una matriz System.Collections.BitArray (~ 3000 elementos) y me gustaría cambiar todos los bits a la izquierda por 1. Sin embargo, la colección no parece apoyar esa operación (es decir, bitArray << 1 no funciona y hay no es un método). ¿Alguna idea sobre cómo hacer eso?

¡Gracias!

Este simple fragmento muestra una forma manual de hacerlo. El valor de bitArray[0] se sobrescribe:

 //... 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 

Hacer esto como un método de extensión no debería ser un gran problema.

System.Numerics.BigInteger sí admite cambios de bit.

No estoy seguro de qué tal la eficiencia, pero este método de extensión hace el trabajo

 public static BitArray ShiftRight(this BitArray instance) { return new BitArray(new bool[] { false }.Concat(instance.Cast().Take(instance.Length - 1)).ToArray()); } 

La manera más fácil de hacerlo es convertir BitArray en una estructura BigInt o similar que admita cambios y retrocesos a nivel de bit. Ahora, el BigInteger incorporado en .NET 4 no admite cambios, creo, pero hay otros que sí lo hacen, como la implementación de Mono.

Recrea bitarray tú mismo como un contenedor alrededor de ulong[] ; implementar cambios de bits en un número menor que 64 es un pedazo de pastel de esa manera y tomará menos tiempo y matará menos osos polares que los otros enfoques sugeridos. Al desconfiar de los “bits que caerían del final”, si desea conservarlos, puede que tenga que hacer crecer la matriz (o no, si son cero y usted dice que el elemento no existente contiene implícitamente cero).