高效计算某个位置或更低位置处的设置位
问题陈述:
给定std::bitset<64>使用任意位值和位位置 X (0-63),确定对位置 X 或更低的位进行计数的最有效方法,或者如果未设置 X 处的位,则返回 0。
优化解决方案:
以下 C 代码生成高度优化的 x86 ASM,可有效计算指定范围内的设置位范围:
#include <bitset> int popcount_subset(std::bitset<64> bits, int pos) { int high_bits_to_eliminate = 63 - pos; bits <<= high_bits_to_eliminate & 63; // Shift to place desired bits at the top return (bits[63] ? ~0ULL : 0) & bits.count(); // Broadcast high bit or return 0, then popcount }
实现细节:
优点:
以上是如何有效地计算位集中某个位置或更低位置的设置位?的详细内容。更多信息请关注PHP中文网其他相关文章!