Tag: 比特操纵

什么是在一个位置或更低位置计数设置位的有效方法?

给定std::bitset<64> bits ,设置任意数量的位并将位位置X (0-63) 在X位或更低位计数位的最有效方法是什么,如果X位没有设置则返回0 注意:如果该位被设置,返回将总是至less为1 蛮力的方式很慢: int countupto(std::bitset<64> bits, int X) { if (!bits[X]) return 0; int total=1; for (int i=0; i < X; ++i) { total+=bits[i]; } return total; } bitset的count()方法会给你所有位的popcount ,但是bitset不支持范围 注意:这不是一个重复的如何计算一个32位整数的设置位数? 因为这要求所有的位不是从0到X的范围