Necesito algo más que la clase System.Collections.BitArray
en mi aplicación. Específicamente, necesito la matriz de bits:Bit Array Equality
- que son inmutables
- Para poner en práctica la igualdad mediante la semántica de valor
he creado mi propia struct
, copiando en gran medida el funcionamiento interno de la implementación BitArray
. (Gracias, .Net Reflector!)
No trato todos los días con operaciones bit a bit, así que no tengo el más alto grado de confianza en mi implementación de igualdad. (Está pasando las pruebas de la unidad que estoy lanzando, pero puede que me falten casos extremos.) Tengo mis soluciones propuestas como respuestas a continuación. Agradecería los comentarios y respuestas de otros por algo que puede ser más correcto o eficiente.
Al igual que el CLR BitArray
, el campo length
se refiere al número de bits en la estructura y el campo array
(o Array
propiedad) se refiere a la matriz de enteros de 32 bits que representa los bits.
[ACLARACIÓN] He elegido tomar la ruta fácil en mis constructores y otros métodos para no poder confiar en que los bits innecesarios sean ceros. Por ejemplo,
Not()
se implementa por la negación bit a bit (~
) sobre los elementos de la matriz de enteros.- Hay disponible un constructor que toma una longitud y un valor booleano para inicializar todos los bits. Si el valor de inicialización es cierto, puse todos los elementos de la matriz int a -1 (en complemento a dos, representados por todos 1'S)
- Etc.
Por lo tanto, I necesidad de manejar (o, más bien, ignórelos) en la comparación. Una buena solución también sería mantener esos bits cero en todo momento, pero en mi situación que dará lugar a más trabajo (tanto para el equipo y para mí!)
¿Cuál es el tipo de miembro de su matriz? –
La matriz es Int32 [] –