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

时间:2015-04-05 18:36:05

标签: java binary double long-integer ieee-754

我尝试了很多来自这个网站的提示,但是我无法正确地将负浮点数或双精度转换为二进制表示。一些数字工作正常,但如果我想转换-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

2 个答案:

答案 0 :(得分:3)

以下似乎有效:

    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

答案 1 :(得分:0)

路易斯·沃瑟曼很清楚地说明了这一点,但我在这里也提供了一个简单的线路代码来解决这个问题: -

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

此问题已在此深入讨论How to convert negative double value to binary value in java?

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