执行以下按位转换的最快方法是什么?
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/