Поскольку в C # нет инструкций по обработке битов, которых у Кнута не было в C, нет, нет решения, специфичного для .NET / C #.
В то же время .NET предлагает динамическую компиляцию, которая поможет вам многократно выполнять перемешивание эффективно.
Какая версия .NET? Вероятно, самый простой подход - использовать алгоритм Кнута и кодировать полученные операции в Expression<Func<ulong, ulong>>
, а затем скомпилировать результат как Func<long, long>
делегат.