Javahex基本双字面值

我正在学习javaauthentication。 而我很好奇的Java文字。 我知道有可能做这样的事情:

int i = 0xAA; long l = 0xAAL; 

这也是可能的浮点variables:

 double d = 123d; float f = 123f; 

所以我逻辑思考这些例子,同样适用于hex。 就像我可以为长文字添加L,我可以添加'd'或'f',但逻辑有缺陷,因为'F'和'D'是有效的hex值。

这是不可能的:

 double d = 0xAAAAAAAAAAAAAAAAAAd; 

这只是不被Java所允许或者有一个简单的方法来做到这一点,我不知道?

事实certificate这可能的,虽然这让我感到吃惊。 JLS的3.10.2节给出了浮点文字的结构,包括hex浮点数Literal

 public class Test { public static void main(String[] args) { double d1 = 0xAAAAAAAAAAAAAAAAAAp0d; double d2 = 0x1.8p1d; System.out.println(d1); // A very big number System.out.println(d2); // 24 = 1.5 * 2^1 } } 

p是二进制指数的一部分, p后面的值是移位剩余值的位数。 其他例子:

 0x1.4p0d => 1.25 (binary 0.01 shifted 0 bits) 0x8p-4d => 0.5 (binary 1000 shifted *right* 4 bits)