BitArray – 移位

我有一个System.Collections.BitArray数组(~3000项),我想将所有位向左移动1.然而,集合似乎不支持该操作(即bitArray << 1不工作,那里不是方法)。 有关如何做到这一点的任何想法?

谢谢!

这个简单的代码片段显示了一种手动方式。 bitArray[0]的值被覆盖:

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

使这个扩展方法应该不是什么大问题。

System.Numerics.BigInteger确实支持位移。

我不确定如何提高效率,但这种扩展方法可以完成这项工作

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

我最简单的方法是将BitArray转换为支持按位移位和返回的BigInt或类似结构。 现在,.Net 4中的内置BigInteger不支持我认为的转变,但还有其他一些,如Mono的实现。

重新创建bitarray作为ulong[]的包装器; 通过小于64的数字实现位移是一块蛋糕,这将比其他建议的方法花费更少的时间并杀死更少的北极熊。 通过警惕“可能会落到最后的位”,如果你想保留它们,你可能需要增长数组(或者不是,如果它们为零,你说不存在的元素隐含地保持为零)。