gpt4 book ai didi

c - 最快的位计数方法

转载 作者:太空狗 更新时间:2023-10-29 17:08:52 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
How to count the number of set bits in a 32-bit integer?

给一个unsigned char类型的值,统计里面的总位数,什么方法最快?我写了如下三个函数,最好的方法是什么,有人能想出更快的吗?(我只想要非常快的)

const int tbl[] =
{
#define B2(n) n, n+1, n+1, n+2
#define B4(n) B2(n), B2(n+1), B2(n+1), B2(n+2)
#define B6(n) B4(n), B4(n+1), B4(n+1), B4(n+2)
B6(0), B6(1), B6(1), B6(2)
};

char naivecount (unsigned char val)
{
char cnt = 0;
while (val)
{
cnt += (val & 1);
val = val >> 1;
}
return cnt;
}

inline tableLookUp(int val)
{
assert(val >= 0 && val <= 255);
return tbl[val];
}

int asmCount(int val)
{
int res = 0;
asm volatile("xor %0, %0\n\t"
"begin:\n\t"
"cmp $0x0, %1\n\t"
"jle end\n\t"
"movl %1, %%ecx\n\t"
"and $0x1, %%ecx\n\t"
"addl %%ecx, %0\n\t"
"shrl %1\n\t"
"jmp begin\n\t"
"end:"
: "=r"(res)
: "r" (val));
return res;
}

编辑:

所有的方法我都测试过了,最快的是使用popcntl指令,在没有该指令的平台上,我会使用查表。

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