System.out.println(Double.toHexString(-1d));
产量
-0x1.0p0
Javadoc将语法解释为:
如果m是具有标准化表示的双精度值,则为子串 用于表示有效数和指数字段。该 有效数字由字符“0x1”表示。接下来是 其余有效数字的小写十六进制表示为 一小部分。十六进制表示中的尾随零是 除非所有数字都为零,否则删除,在这种情况下,单个零是 用过的。接下来,指数由“p”后跟小数表示 无偏指数的字符串,好像是通过调用产生的 指数值上的Integer.toString。
这是我第一次看到这些“-0x1”。符号。它是一些行业标准,还是Java的创新?
答案 0 :(得分:1)
这不仅仅是java,它在C中看起来也是这样,这个页面解释了一些:http://www.exploringbinary.com/hexadecimal-floating-point-constants/
由于十六进制数表示一个double,它用科学计数法表示,所以你看到的是0到0的幂。事实是toHexString方法首先查看二进制字符串,并翻译任何'。'之后的部分十六进制这意味着句点之前的数字将始终为1,因此javadoc将“0x1”作为将数字描述为十六进制的符号的原因。 ' - '只是说它是否定的,它不是符号的一部分。