c - 2 < x 的最大幂的高效计算

标签 c math

<分区>

我需要计算 2 的最大幂 < 整数值 x

目前我正在使用:

#define log2(x) log(x)/log(2)
#define round(x) (int)(x+0.5)

x = round(pow(2,(ceil(log2(n))-1)));

这是一个性能关键函数

是否有计算 x 的计算效率更高的方法?

最佳答案

您实际上是在寻找数字中最高的非零位。许多处理器为此内置了指令,而这些指令又被许多编译器公开。例如,在 GCC 中我会查看 __builtin_clz , 哪个

Returns the number of leading 0-bits in x, starting at the most significant bit position.

连同 sizeof(int) * CHAR_BIT 和一个移位,您可以使用它来计算相应的纯二次幂整数。还有一个用于长整数的版本。

(CPU 指令可能称为“CLZ”(计算前导零),以防您需要为其他编译器查找它。)

关于c - 2 < x 的最大幂的高效计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16001683/

相关文章:

javascript - 在javascript中混合两种颜色 "naturally"

c - Socket如何在C中接受多个连接

c - 带有嵌套 for 循环的简单 C 程序在 Windows Powershell 中停止工作

java - 如果我们知道距离 x1, y1, y2 则计算 x2

javascript - 避免 JavaScript 奇怪的小数计算问题

java - 不同圆上两点之间的最大和最小距离是多少?

c++ - e^x 的无限和收敛到一个不正确的值

c - 在 fgets() while 循环期间清空动态数组以供重复使用

c - 使用 C 代码验证 OpenSSL s/mime 签名

c - 如何从变量访问特定的一组位?