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

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


因此,最低有效零位必须设置为1,而剩下的位(无论是零还是一)都必须设置为零,仅此而已。

最佳答案

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

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

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


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

关于c++ - 如何左移最低有效零?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18011977/

10-12 03:21