如何向左移最不重要的零?

时间:2013-08-02 08:16:20

标签: c++ bit-manipulation bitwise-operators bit-shift significant-digits

执行以下逐位转换的最快方法是什么?

X..XA01..1 // input
X..X011..1 // output

因此,必须将最低有效零位设置为1,并将剩下的位(无论是零还是一)设置为零,就是这样。

1 个答案:

答案 0 :(得分:3)

获取最右边的零很容易:~x & (x + 1)

使用它,您可以通过几个简单的步骤完成此操作:(未经测试)

uint32_t rightmost_zero = ~x & (x + 1);
uint32_t result = (x | rightmost_zero) & ~(rightmost_zero << 1);

可能有更简单/更快的方式。