Fel*_*ara 0 java optimization performance
我有一个 long 设置了一个位,我需要知道它是哪个,例如索引。我需要尽快计算出来。天真的想法是除以 2 并检查结果是否为 1。但这最多需要 63 次迭代(最坏的情况)。
我的下一个想法是进行二分查找,例如查看它是 63-32 位还是 31-0 位,然后是 63 - 48、47 - 31、31 - 16、15 - 0 等等,有很多 if-else 语句,但这给了我一堆代码......
此外,我想尽量减少对象的创建和使用的内存。您可能会认为我对 Java 的看法是错误的,应该使用 C/C++。嗯,这是为了学校比赛,我别无选择:)
我想看一些示例代码!
使用Long.numberOfTrailingZeros- 这将是您正在寻找的索引。
Long.numberOfLeadingZeros 如果从最高位开始计算位,也很有用。
这两种方法都是 JVM 内部函数,即它们被 JIT 编译器专门处理。这些方法被转换为特殊的 CPU 指令 (TZCNT / LZCNT),因此非常高效。