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位的英特尔CPU。
一个有用的参考是Bit Hacks page,另一个是fxtbook.pdf
然而,尽管这些方法为解决问题提供了有用的指导,但它们并没有给出一个现成的答案。
我正在研究一个可重用的函数,它可以做一些类似于_BitScanForward64和_BitScanReverse64的事情。
最佳答案
根据我的评论,这是C中的一个函数,用于计算为64位整数修改的前导零位。
public static UInt64 CountLeadingZeros(UInt64 input)
{
if (input == 0) return 64;
UInt64 n = 1;
if ((input >> 32) == 0) { n = n + 32; input = input << 32; }
if ((input >> 48) == 0) { n = n + 16; input = input << 16; }
if ((input >> 56) == 0) { n = n + 8; input = input << 8; }
if ((input >> 60) == 0) { n = n + 4; input = input << 4; }
if ((input >> 62) == 0) { n = n + 2; input = input << 2; }
n = n - (input >> 63);
return n;
}
关于c# - 快速找到64位整数中最高有效位和最低有效位的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31374628/