在 ulong (C#) 中获取从最低有效位 (LSB) 到最高有效位 (MSB) 的第一个 set(1) 位位置的最快(或至少非常快)方法是什么?
对于 ulong i = 18;
(10010) 这将是 2(如果我们从 0 开始计算位置,则为 1)。
MS C++ 编译器有 _BitScanForward64此任务的内在函数,但 C# 编译器没有类似物。
最佳答案
随着 .NET Core 3.0 引入硬件内在函数,最快的解决方案应该是
ulong value = 18;
ulong result = System.Runtime.Intrinsics.X86.Bmi1.X64.TrailingZeroCount(value);
或者,新的 System.Numerics.Bitoperations 方法也使用硬件内在函数:
int result2 = System.Numerics.BitOperations.TrailingZeroCount(value);
关于c# - 在 ulong (C#) 中获得最后一个有效位的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37083402/