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)