如何将负双精度转换为二进制表示?

How to convert negative double to binary representation?

我尝试了该站点的很多提示,但无法将负浮点数或双精度数正确转换为其二进制表示形式。有些数字工作正常,但如果我想转换 -11.1,我得到错误的位表示。

我的代码:

public static String fromFloatTo64Binary(String input) {

    input = input.replaceAll(",", ".");

    double number = Double.parseDouble(input);
    long longBits = Double.doubleToLongBits(number);
    String result = Long.toBinaryString(longBits);

    // check if input is signed
    if (input.substring(0, 1).equalsIgnoreCase("-")) {
        result = 1 + result;
    } else {
        result = 0 + result;
    }

    return result;

}

输入:11.1
输出:0 1000000 00100110 00110011 00110011 00110011 00110011 00110011 00110011

输入:-11.1
输出:1 1100000 00010011 00011001 10011001 10011001 10011001 10011001 10011001

再次将这些位转换为十进制:-6.402228286547589E154

以下似乎有效:

    input = input.replaceAll(",", ".");

    double number = Double.parseDouble(input);
    long longBits = Double.doubleToLongBits(number);
    String result = Long.toBinaryString(longBits);
    StringBuilder builder = new StringBuilder();
    for (int i = result.length(); i < 64; i++) {
        builder.append('0');
    }
    return builder.append(result).toString();

(IDEOne 结果在 https://ideone.com/winQFa

Louis Wasserman 表达得非常好,但在这里我也给出了一个简单的代码来解决这个问题:-

 System.out.println(Long.toBinaryString(Double.doubleToRawLongBits(-11.1)));

这里也对这个问题进行了深入的讨论How to convert negative double value to binary value in java?

希望对您有所帮助。祝你有美好的一天!