c - 此代码如何为任何给定数字找到 2 的下一个最高幂

标签 c algorithm bit-manipulation

此代码如何为 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 得到 2 的幂。

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

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

关于c - 此代码如何为任何给定数字找到 2 的下一个最高幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11084367/

相关文章:

algorithm - 无限数量的最大不平衡红黑树

php - 为什么我应该在 PHP 中使用按位/位掩码?

language-agnostic - 计算非对称字节

c - C 中的 Long Long、小数和输入验证

在有向图中查找不同路径数的算法

c - 在 C 中传递二维数组

algorithm - 分析 QuickSort 算法

java - 让给定范围的位更有效?

c - 填充结构的实际大小,(成员大小的总和,没有用于对齐的填充)

c - 卡在最大无符号短变量提示上