BitArray - 移位

时间:2010-09-10 10:52:22

标签: c# .net bitarray

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

谢谢!

5 个答案:

答案 0 :(得分:4)

这个简单的代码段显示了一种手动方式。 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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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