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


产量

-0x1.0p0


Javadoc将语法解释为:


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


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

最佳答案

它不仅是Java,而且在C语言中也是如此,此页面对此进行了一些解释:http://www.exploringbinary.com/hexadecimal-floating-point-constants/

由于十六进制数表示双精度数,因此用科学计数法表示,因此您所看到的是1.0乘以0的幂。问题是toHexString方法首先查看二进制字符串,并在转换后的任意部分进行转换。 '。'十六进制。这意味着句点之前的数字将始终为1,因此javadoc谈论“ 0x1”的原因是将数字描述为十六进制。 “-”仅表示否定,不是表示法的一部分。

10-08 14:36