我的函数应该在整数中找到LSB1
的位索引。
我的问题是如何测试这是否有效?我想这个函数需要一个32位的无符号整数,但是所有测试它的尝试都证明是不成功的。我不知道这是因为我的建筑还是什么。
编辑:
#include <stdio.h>
#include <stdint.h>
#include <assert.h>
int bitscanforward(uint32_t v)
{
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
};
assert(v);
return MultiplyDeBruijnBitPosition[((v & -v) * 0x077CB531U) >> 27];
}
int main()
{
uint32_t x = 0X05FEEEEE;
int answer = bitscanforward(x);
printf("Index of LS1B: ");
printf( "%d", answer );
return 0;
}
答案 0 :(得分:0)
typedef
您自己的unit32
是不好的做法:请注意,您的版本将无法正常工作,因为long long
至少为64位)。而是使用标准定义的stdint.h
。在那里,你(很可能)找到uint32_t
,保证保持32位。
要验证您的代码,您可以使用unittest框架,或者只需使用经过深思熟虑的参数调用该函数并检查结果(框架几乎完全相同)。
请注意,函数的名称应该代表它实际执行的操作。你的没有。对于给定的任务,通常使用“找到第一个”/ ffo。像gcc这样的一些编译器已经为此构建了内置函数(它直接映射到某些CPU上的汇编程序指令)。