【发布时间】:2015-07-13 02:24:16
【问题描述】:
StackOverflow 上有很多关于此的问题。 很多。但是我找不到答案:
- 在 C# 中工作
- 适用于 64 位整数(相对于 32 位)
快于:
private static int Obvious(ulong v)
{
int r = 0;
while ((v >>= 1) != 0)
{
r++;
}
return r;
}
甚至
int r = (int)(Math.Log(v,2));
我假设这里是 64 位 Intel CPU。
一个有用的参考是Bit Hacks page,另一个是fxtbook.pdf 然而,虽然这些给出了解决问题的有用方向,但它们并没有给出现成的答案。
我正在寻找一个可重复使用的函数,它可以执行类似于 _BitScanForward64 和 _BitScanReverse64 的操作,仅适用于 C#。
【问题讨论】:
-
这不是和stackoverflow.com/questions/10439242/…本质上一样吗?显然,您必须将其调整为 64 位,它为您提供与您正在寻找的数字相反的数字,但它传达的信息相同。
-
@Taekahn 调整到 64 位并非易事。尝试一下。正如我在问题中所承认的那样,SO 上确实存在 32 位答案。
标签: c# x86 bit-manipulation leading-zero