Быстрый способ удалить биты из Улонга

Я хочу удалить биты из 64-битной строки (представленной без знака длиной). Я мог бы сделать это с помощью последовательности операций маски и сдвига или выполнить итерацию каждого бита, как показано в коде ниже. Есть ли какой-нибудь хитрый способ, чтобы сделать это быстрее?

public ulong RemoveBits(ulong input, ulong mask)
{
    ulong result = 0;
    ulong readbit = 1;
    ulong writebit =1;
    for (int i = 0; i < 64; i++)
    {   
        if ((mask & readbit) == 0) //0 in the mask means retain that bit
        {
            if ((input & readbit) > 0)
            {
                result+= writebit;  
            }
            writebit*=2;
        }
        readbit *= 2;
    }
    return result;
}

Мне нужно выполнитьRemoveBits миллионы раз в критическом сценарии производительности.

Это, вероятно, слишком абстрактно, чтобы помочь, но число используемых разных масок, хотя и не известно во время компиляции, определяется рано во время выполнения (до критического бита производительности) и, вероятно, будет меньше 100. По сути, я использую цепочка для представленияn-tuple, а такжеRemoveBits проекты наm-tuple (m < n).

Ответы на вопрос(3)

Ваш ответ на вопрос