将所有位设置为给定的最高位

时间:2014-08-13 16:17:53

标签: bit-manipulation twos-complement

如果我有一个二进制数,比如x = 00010000,我可以通过执行y = x | (x - 1) y = 00011111来将所有位设置为最高且仅设置为位。

如果设置了多个位,如何实现相同的结果,例如x = 00010101

1 个答案:

答案 0 :(得分:1)

这是find first set problem

没有可能的解决方案只有按位操作。 如果您想以通常的方式对其进行编码,请考虑使用“二进制搜索”来获得更高效的算法。

这是让你入门的东西,但我相信那里有更高效的算法

int findfirstset(unsigned int x) {
    x |= (x >>  1);
    x |= (x >>  2);
    x |= (x >>  4);
    x |= (x >>  8);
    x |= (x >> 16);
    return x - (x >> 1);
}

从那里你可以做你的操作:

y = x | (x - 1)