如何在Java中编写十六进制浮点数字面量?

3
对于数字-5 x 10^-1,即-0.5,我可以这样写作为Java中的“十进制浮点字面值”:-5E-1f-50E-2f-0.05E+1F。如果将相同的数字用“十六进制浮点字面值”来表示,我发现-0X32p-2f是错误的,这个值应该是-25.0。我将50作为0x32并使用此符号来表达,因此出现了错误。如何学习以“十六进制浮点字面值”的方式写上述值-5 x 10^-1

50E-2f 表示 50 * 10^-20x32p-2f 表示 0x32 * 16^-2(这里的 ^ 表示“的幂”)。 - Oliver Charlesworth
1
@OliverCharlesworth,它不是16^-2,而是2^-2 - Jesper
@OliverCharlesworth 0x32 * 16^-2 的结果是 0.19,但 java.exe 显示为 0.25 - overexchange
@Jesper:啊,是的,你说得对。 - Oliver Charlesworth
2个回答

5

请参阅Java语言规范的3.10.2节

对于十六进制浮点文字,指数是二进制指数;它是2的幂,而不是十进制浮点文字中的10的幂。

因此,0x32p-2f表示50乘以2的负2次方,而不是10的负2次方。

表示0.5的十六进制float文字将是0x1p-1f


我依赖那些阅读JLS并在视频中讲解的人。我现在无法阅读JLS。感谢您的回答。 - overexchange

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接