【发布时间】:2013-01-12 07:11:09
【问题描述】:
我遇到了一段代码,用于查找大于 32 位整数 n 的 2 的最小幂...
n+=(n==0);
n--;
n|=n>>1;
n|=n>>2;
n|=n>>4;
n|=n>>8;
n|=n>>16;
n++;
现在它是如何工作的?我尝试在 n=100 的每一步之后以 base-2 打印数字,但这没有多大意义。其背后的逻辑是什么?
【问题讨论】:
-
我以为这是一个 32 位整数?
-
它仅适用于 32 位 uint。顺便说一句,有 same question:如果 nextpow2 是 2 的幂 (
x & ( x – 1) == 0),则 nextpow2 是相同的数字,否则是msb << 1。 -
@WhozCraig 是的。抱歉,我编辑了问题。
标签: c algorithm bit-manipulation