Gre*_*lin 4 c algorithm bit-manipulation
对于任何给定数字[> 1]的32位整数,此代码如何工作以查找下一个最高2的幂?
n--;
n = n | n>>1;
n = n | n>>2;
n = n | n>>4;
n = n | n>>8;
n = n | n>>16;
n++;
Run Code Online (Sandbox Code Playgroud)
移位和按位序列保证一个由所有1s 组成的数,这比一个2的幂小1.向其中添加1可获得2的幂.
初始递减1是为了使其适用于n已经是2的幂的值.
(显然,如果n最初这个代码不起作用0.)