对于任何给定的数字,此代码如何工作以查找下一个最高2的幂

对于32位整数,对于任何给定数字[> 1],此代码如何工作以查找下一个最高2的幂?

n--;
n = n | n>>1;
n = n | n>>2;
n = n | n>>4;
n = n | n>>8;
n = n | n>>16;
n++;
移位和按位序列保证一个由全1组成的数,它比2的幂小1.向其中添加1可获得2的幂.

初始递减1是为了使其适用于已经为2的幂的n值.

(显然,如果n最初为0,则此代码不起作用.)

相关文章
相关标签/搜索