c# - 在 ulong (C#) 中获得最后一个有效位的最快方法?

标签 c# .net performance bit-manipulation bit

在 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/

相关文章:

c# - VS 2015 共享项目导致类型同时存在于 X 程序集和 Y 程序集中 (CS0433)

.net - Fody.stamp 超时配置

c# - 获取正确的VS2017实例用于自开发扩展

r - 为什么对列表进行分类会减慢 lengths() 函数的速度?

Python 多线程性能 - 使用 C++ 代替?

android - Android 中的最佳实践是什么,创建新的字符串对象(静态最终)还是仅使用 string.xml 文件(并调用许多 getter)?

C# Nmath 到 Python SciPy

c# - 如何编写更新查询来更新 mongodb 中的多个字段?

c# - 确定 LongListSelector 何时滚动

c# - 我可以将键盘快捷键转发到停靠在 WPF 窗口中的 lync 对话窗口吗