Быстрая перестановка битов в C#

Я ввожу быстрый поиск Чарикара на чувствительном к местности хэше и я ищу быстрый метод перестановки битов (то, что можно сделать за одну операцию в MMIX) в C#.

требования:

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

Я знаю, что кнут вдается в это подробно, но мне было интересно, есть ли какое-либо решение .NET/C#.

EDIT: я использую .NET версии 3.5.

1 ответов


поскольку C# не предоставляет никаких инструкций по обработке битов, которых у Кнута не было в C, нет, нет решения, специфичного для .NET/C#.

в то же время .NET предлагает динамическую компиляцию, которая поможет вам многократно эффективно выполнять перетасовку.

какая версия .NET? Самый простой подход, вероятно, будет использовать алгоритм кнута и кодировать результирующие операции в Expression<Func<ulong, ulong>>, затем скомпилируйте результат как Func<long, long> делегат.