我找到了一些代码here,它完成了我正在寻找的int,但当我插入一个Long时,LSB是第64位,它返回0而不是64.我可以对这种情况进行明确的判断,但肯定有更好的方法.

public class Test{
    public static void main(String[] args){
        long test = 0b1000000000000000000000000000000000000000000000000000000000000000L;
        
        //this should print "64"
        System.out.println(getLSBIndx(test));
    }
    public static int getLSBIndx(long n){
        if(n == 0) return -1;
        return (int)((Math.log10(n & -n)) / Math.log10(2)) ;
    }
}

推荐答案

你可以根据Long.numberOfTrailingZeros来计算它.

public static int getLSBIndx(long n) {
    return n == 0 ? -1 : Long.numberOfTrailingZeros(n) + 1;
}

Java相关问答推荐

如何使用Spring Data从MongoDB文档中包含的数组中 Select 单个元素?

使用json参数通过单击jSP文件中的按钮来运行server时出现问题

无法运行Java(已解决)

为什么JFrame paint()多次绘制同一点(或根本不绘制)?

基于仅存在于父级中的字段查询子文档?

如何使用CSS为选定但未聚焦的表格行设置背景 colored颜色 ?

Java 8中的多个字段和计数

Java函数式编程中的双值单值映射

使用Testcontainers与OpenLiberty Server进行集成测试会抛出SocketException

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

Arrays.hashcode(int[])为不同的元素提供相同的散列

使用Jolt将字段转换为列表

如何将Pane的图像快照保存为BMP?

在使用具有不同成本的谓词调用allMatch之前对Java流进行排序会带来什么好处吗?

如何在SWT菜单项文本中保留@字符

如何通过gradle命令行从build.gradle获得Java targetCompatibility

spring 更新多项管理关系

如何使用stream.allMatch()为空流返回false?

无泄漏函数的Java DRY

如何在更改分辨率时将鼠标坐标计算为世界坐标