我想编写一个返回最接近 2 的下一个幂的函数。例如,如果我的输入是 789,则输出应该是 1024。有没有什么方法可以在不使用任何循环而只使用一些位运算符的情况下实现这一点?
检查Bit Twiddling Hacks。你需要得到以 2 为底的对数,然后加 1。32 位值的示例:
向上取整到 2 的次幂 unsigned int v; // compute the next highest power of 2 of 32-bit v v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++;
向上取整到 2 的次幂
unsigned int v; // compute the next highest power of 2 of 32-bit v v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++;
扩展到其他宽度应该是显而易见的。