执行以下逐位转换的最快方法是什么?
X..XA01..1 // input
X..X011..1 // output
因此,必须将最低有效零位设置为1,并将剩下的位(无论是零还是一)设置为零,就是这样。
答案 0 :(得分:3)
获取最右边的零很容易:~x & (x + 1)
使用它,您可以通过几个简单的步骤完成此操作:(未经测试)
uint32_t rightmost_zero = ~x & (x + 1);
uint32_t result = (x | rightmost_zero) & ~(rightmost_zero << 1);
可能有更简单/更快的方式。