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);
}
这种方法需要很长时间。我能优化吗?
答案 0 :(得分:1)
通过将mod 2 ^ 64更改为位和操作,您可以获得良好的加速:
public static BitArray ShLo(BitArray B)
{
return new BitArray(BitConverter.GetBytes(Math.Floor((double)((GetIntFromBitArray(B)/2) & Int64.MaxValue))));
}
我会回应评论中所说的内容,看起来你想要BigInteger,这将允许你对任意大小的整数进行数学和位级操作。