相关疑难解决方法(0)

如何取消设置最右边的 N 个设置位

有一个相对知名的技巧可以取消设置最右边的一个位:

y = x & (x - 1) // 0b001011100 & 0b001011011 = 0b001011000 :)
Run Code Online (Sandbox Code Playgroud)

我发现自己有一个紧密的循环来清除最右边的 n 位,但是有更简单的代数技巧吗?

假设 n 相对较大(对于 64 位整数,n 必须小于 64,但通常约为 20-30)。

// x = 0b001011100 n=2
for (auto i=0; i<n; i++) x &= x - 1;
// x = 0b001010000
Run Code Online (Sandbox Code Playgroud)

我翻阅了 TAOCP Vol4 几次,但找不到任何灵感。

也许有一些硬件支持?

bit-manipulation intrinsics integer-arithmetic

5
推荐指数
1
解决办法
918
查看次数