0

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

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

因此,最低有效的零位必须设置为 1,并且留给它的位(无论是零还是一)必须设置为零,仅此而已。

4

1 回答 1

3

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

使用它,您可以通过几个简单的步骤来做到这一点:(未测试)

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

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

于 2013-08-02T08:22:48.633 回答