如果我有一个二进制数,比如x = 00010000
,我可以通过执行y = x | (x - 1)
y = 00011111
来将所有位设置为最高且仅设置为位。
如果设置了多个位,如何实现相同的结果,例如x = 00010101
?
答案 0 :(得分:1)
没有可能的解决方案只有按位操作。 如果您想以通常的方式对其进行编码,请考虑使用“二进制搜索”来获得更高效的算法。
这是让你入门的东西,但我相信那里有更高效的算法
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)