作为标题我不知道 std::__lg
是什么意思在谷歌之后?这行到底是做什么的:int n = std::__lg(block_sz - pos_l + 1);
最佳答案
它有助于计算整数的基于 2 的对数,即它返回数字中最高设置位的索引(或 -1 表示 0)。
即对于 1 它将返回 0,对于 16 它将返回 4,对于 1024 它将返回 10,等等。
这可用于有效地预测数组的预分配大小,四舍五入到最接近的 2 的幂等。
请注意,与任何其他以 __
开头的函数一样,它是编译器或库的内部函数,因此您不应依赖它的存在,这样的代码将不可移植。 std 库的其他实现可以带有完整的解决方案和类似助手的不同名称(如果它们使用完全相似的东西)。
POSIX 提供了类似的功能 - ffs()
,还有 ffsl
和 ffsll(参见同一页),它们是 GNU 扩展,分别与 long 和 long long 一起工作。
对于评论中的问题——如何从 Java 中使用它。由于上述原因,首先这不是一个好主意,其次它需要 JNI 包装器。第三但也是最重要的——实际上没有理由这样做。 Java已经提供了类似的方法Integer.heghestOneBit()
,尽管注意它与描述的 std::__lg 相比返回 +1,即 0 表示 0,1 表示 1,11 表示 1024,等等。
关于c++ - 什么是 std::__lg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40434664/