设置的最小有效位的位置我正在寻找一种有效的方法来确定在整数中设置的最小有效位的位置,例如对于0x0FF0,它将是4。一个简单的实现是:unsigned GetLowestBitPos(unsigned value){
assert(value != 0); // handled separately
unsigned pos = 0;
while (!(value & 1))
{
value >>= 1;
++pos;
}
return pos;}有什么办法能挤出一些循环吗?(注意:这个问题是给喜欢这类事情的人,而不是为了让人们告诉我木偶优化是邪恶的。)
3 回答
千万里不及你
TA贡献1784条经验 获得超9个赞
unsigned int v; // find the number of trailing zeros in 32-bit v int r; // result goes herestatic 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];
“-解释上述代码的工作原理。 “-详细分析这一问题,特别侧重于国际象棋编程。
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
FFS(3)-Linux手册页
名字,姓名
FFS-查找一个单词中的第一个位
简介 #include <strings.h>int ffs(int i);#define _GNU_SOURCE#include <string.h>int ffsl(long int i);int ffsll(long long int i);
描述
函数返回在字I中设置的第一个(最不重要的)位的位置。最不重要的位是位置1和最重要的位置,例如32或64。函数ffsll()和ffsl()做同样的工作,但使用可能不同大小的参数。
返回值
这些函数返回第一个位集的位置,如果i中没有设置位,则返回0。
符合
4.3BSD,POSIX.1-2001。
注记
BSD系统有一个原型 <string.h>
.
拉丁的传说
TA贡献1789条经验 获得超8个赞
bsf
边注:
- 3 回答
- 0 关注
- 481 浏览
添加回答
举报
0/150
提交
取消