Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
执行以下逐位转换的最快方法是什么?
X..XA01..1 // input X..X011..1 // output
因此,最低有效的零位必须设置为 1,并且留给它的位(无论是零还是一)必须设置为零,仅此而已。
获得最右边的零很容易:~x & (x + 1)
~x & (x + 1)
使用它,您可以通过几个简单的步骤来做到这一点:(未测试)
uint32_t rightmost_zero = ~x & (x + 1); uint32_t result = (x | rightmost_zero) & ~(rightmost_zero << 1);
可能有更简单/更快的方法。