Быстрый способ удалить биты из Улонга
Я хочу удалить биты из 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)
.