我想写一个函数,返回最接近的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++;

延伸到其他宽度应该是显而易见的.

C++相关问答推荐

如何在C中的空指针函数中传递浮点值

CC crate 示例不会与C函数链接

ATTiny1606定时器TCA 0中断未触发

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

双指针指向常量双指针的指针类型赋值不兼容

将宏值传递给ARM链接器,该链接器将变量放置在特定位置

解决S随机内存分配问题,实现跨进程高效数据共享

SSH会话出现意外状态

如何使用唯一数字对整型进行分区

指向不同类型的指针是否与公共初始序列规则匹配?

将数组插入数组

如何使这个While循环在新行上结束

Realloc():中止的下一个大小无效(核心转储)

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

按字典顺序打印具有给定字符的所有可能字符串

`%%的sscanf无法按预期工作

我错误地修复了一个错误,想了解原因

在同一范围内对具有相同类型的变量执行的相同操作在同一C代码中花费的时间不同

将数组中的所有元素初始化为 struct 中的相同值