Double.toHexString()语法 - 它来自哪里?

时间:2014-07-17 14:08:04

标签: java double double-precision

    System.out.println(Double.toHexString(-1d));

产量

-0x1.0p0

Javadoc将语法解释为:

  

如果m是具有标准化表示的双精度值,则为子串   用于表示有效数和指数字段。该   有效数字由字符“0x1”表示。接下来是   其余有效数字的小写十六进制表示为   一小部分。十六进制表示中的尾随零是   除非所有数字都为零,否则删除,在这种情况下,单个零是   用过的。接下来,指数由“p”后跟小数表示   无偏指数的字符串,好像是通过调用产生的   指数值上的Integer.toString。

这是我第一次看到这些“-0x1”。符号。它是一些行业标准,还是Java的创新?

1 个答案:

答案 0 :(得分:1)

这不仅仅是java,它在C中看起来也是这样,这个页面解释了一些:http://www.exploringbinary.com/hexadecimal-floating-point-constants/

由于十六进制数表示一个double,它用科学计数法表示,所以你看到的是0到0的幂。事实是toHexString方法首先查看二进制字符串,并翻译任何'。'之后的部分十六进制这意味着句点之前的数字将始终为1,因此javadoc将“0x1”作为将数字描述为十六进制的符号的原因。 ' - '只是说它是否定的,它不是符号的一部分。