2017-01-02 33 views
2
public static BitArray ShLo(BitArray B) 
{ 
    return new BitArray(System.BitConverter.GetBytes(Math.Floor((GetIntFromBitArray(B)/2) % (Math.Pow(2, 64))))); 
} 
private static ulong GetIntFromBitArray(BitArray bitArray) 
{ 
    var array = new int[2]; 
    bitArray.CopyTo(array, 0); 
    return (uint)array[0] + ((ulong)(uint)array[1] << 32); 
} 

该方法需要很长时间。我可以优化它吗?如何在此方法中优化数学运算?

+2

将其拆分为单独的语句并获得体面的分析器来查看_which_部分需要“很长时间”。直到你这样做,你只是猜测。 –

+2

你的方法实际上试图实现什么?它不利于我们不知道'GetIntFromBitArray'的作用... –

+0

@JonSkeet更新代码。现在GetIntFromBitArray方法在这里。 –

回答

1

你可以通过改变国防部2^64位和操作获得良好的加速:

public static BitArray ShLo(BitArray B) 
{ 
    return new BitArray(BitConverter.GetBytes(Math.Floor((double)((GetIntFromBitArray(B)/2) & Int64.MaxValue)))); 
} 

我想重复一下已经在评论中有人说,它看起来是像你想BigInteger这将允许您对任意大小的整数进行数学和比特级操作。

+0

非常好!这真的是加快我的代码。现在最糟糕的地方 - GetIntFromBitArray方法。 –

+0

除了错误:(我说位移,我很困惑,它应该是零,但后面的64个字节。代码更新。 – Stuart

+0

即使我的BitArray B长度为64? 'BitArray B = new BitArray (64);' –