有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

二进制Java BigInteger测试位64位长

这可能是一个愚蠢的问题,但我似乎找不到一个简单的答案

我正在读取一个64位(8字节)long值,然后尝试使用BigInteger.testBit来查看是否设置了位63,因为它被用作标志

long value = 0x4000863; //This value is actually read from a file
Long.toBinaryString(value) = 100000000000000100001100011
BigInteger test = new BigInteger(Long.toString(value));
if (test.testBit(63)) {
    //yay
}
else {
    //boo
}

上面的代码是我目前正在尝试的,它说位63没有设置。由于它被存储为长时间,我不认为我必须填充值,或者我只是做了一些完全错误的事情

如有任何意见或建议,将不胜感激

谢谢


共 (1) 个答案

  1. # 1 楼答案

    你数错了位:

    public void test() {
        // Binary - 100000000000000100001100011
        //          ^ This is bit 26
        long value = 0x4000863; 
        // Binary - ‭1000000000000000000000000000000000000000000000000000000000000000‬
        //          ^ THIS is bit 63
        long bigger = 0x8000000000000000L;
        BigInteger test = new BigInteger(Long.toString(value));
        System.out.println("L:" + Long.toBinaryString(value) + "\r\nB:" + test.toString(2) + "\r\nB63:" + test.testBit(63));
        test = new BigInteger(Long.toString(bigger));
        System.out.println("L:" + Long.toBinaryString(bigger) + "\r\nB:" + test.toString(2) + "\r\nB63:" + test.testBit(63));
    }