仅使用按位运算计算设置的位数

发布于 2024-12-03 00:55:20 字数 752 浏览 0 评论 0原文

可能的重复:
最佳计数算法32 位整数中设置的位数?

仅使用 ! 〜& ^ | + << >>>运算符,我需要计算 32 位整数中设置的位数,同时仅直接访问 8 位。所以只有 0xaa 而不是

0xaaaa 0x07 = 3 和 0x05 = 2

我也只能使用最多 40 个运算符。

现在我的解决方案使用 90 并且是:

int countBitsSet(int x)
{
int count = 0;
int mask = 0x01 // 00000001

count = (x & mask);
count += (x >> 1) & mask;
count += (x >> 2) & mask;
.
.
.
count += (x >> 31) & mask;

return count;
}

有谁知道有什么方法可以将此步骤减少一半吗?我正在考虑找到一种方法来并行执行或同时计算 4 位,但我不知道如何实现。其他人已经在 25 个运算符中做到了,所以我知道有一种方法。有什么想法吗?

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

Using only ! ~ & ^ | + << >> operators, I need to count the number of bits set in a 32 bit integer while only accessing directly 8 bits. So only 0xaa not 0xaaaa

Ex. 0x07 = 3 and 0x05 = 2

I also can only use a max of 40 operators.

Right now my solution uses 90 and is:

int countBitsSet(int x)
{
int count = 0;
int mask = 0x01 // 00000001

count = (x & mask);
count += (x >> 1) & mask;
count += (x >> 2) & mask;
.
.
.
count += (x >> 31) & mask;

return count;
}

Does anyone know of a way to reduce this step by half? I was thinking of finding a way to do it in parallel or something and count 4 bits at once but I cant figure out how. Other people have done it in 25 operators so I know there is a way. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

莫相离 2024-12-10 00:55:20

1)你计算出错误的结果;缺少 31 的移位。 2)你应该使用for循环。 3)搜索一下位计数算法会给你一堆链接。

1) You compute the wrong result; the shift of 31 is missing. 2) You should have used a for loop. 3) Searching a bit for bit counting algorithms would have given you a bunch of links.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文