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);
}


此方法需要很长时间。我可以优化它吗?

最佳答案

您可以通过将mod 2 ^ 64更改为一点并进行操作来提高速度:

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


我会回覆评论中所说的内容,这似乎是您想要的BigInteger,它允许您对任意大小的整数进行数学和位级运算。

关于c# - 如何使用这种方法优化数学运算?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41431841/

10-09 23:09