gpt4 book ai didi

c++ - 如何找到 n,其中 k = 2^n

转载 作者:行者123 更新时间:2023-11-30 19:16:54 25 4
gpt4 key购买 nike

如果我知道一个整数 k = 2^n ,如何高效找到n ?换句话说,如果我知道设置了整数中的单个位,那么如何获取该位的位置?

一个想法是找到 k-1 的汉明权重但是还有其他我没有想到的更简单的方法吗?

最佳答案

Bit Twiddling Hacks有很多令人惊奇的(并且晦涩的,面向性能的)位黑客。最适合您使用的方法似乎是使用乘法和查找。

unsigned int v;  // find the number of trailing zeros in 32-bit v 
int r; // result goes here
static const int MultiplyDeBruijnBitPosition[32] =
{
0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
};
r = MultiplyDeBruijnBitPosition[((uint32_t)((v & -v) * 0x077CB531U)) >> 27];

This page提供了对问题的详 segmentation 析,重点是国际象棋编程。

答案复制自here 。PS:不知道如何在这个问题上感谢作者,所以就这样写了。

关于c++ - 如何找到 n,其中 k = 2^n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29180052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com