关于原始初始化的十六进制表示法的问题

时间:2014-01-11 09:48:01

标签: java double hex

我想使用十六进制表示法直接初始化double。我知道这适用于intLong,如以下示例所示(结果值始终正确):

    int i   = 0x10000000;           // 268435456
    Long li = 0x1000000000000000L;  // 1152921504606846976

另一方面,如果我尝试对双打执行相同的操作,它可以工作,但只能在4个字节的范围内(在代码示例中查看注释)。对于第二个,无效的表示法,Netbeans IDE一直告诉我这是一个整数值,因此太大了:

    double d1 = 0x10000000;         // 2.68435456E8
    double d2 = 0x1000000000000000; // not valid

float - 值的工作原理以及它们在4个字节的范围内:

float f1 = 0x10000000;              // 2.68435456E8

  1. 有没有办法直接使用十六进制表示法编写/初始化双倍?
  2. 唯一的原因是能够使用十六进制表示法编写Long,表示此符号中没有“L”(与浮点数或“f”相反)标记双打无效“。”
  3. 为什么4字节有限制?为什么它适用于double而不适用于Long
  4. 感谢您的建议和建议。

2 个答案:

答案 0 :(得分:2)

Java支持自1.5以来的浮点十六进制文字

double d = 0x1f.1p1;

答案 1 :(得分:1)

如果您只想使用长范围内的整数值初始化double,请使用:

double d2 = 0x1000000000000000L;

您还可以使用BigInteger提供远程范围之外的整数十六进制值:

double d3 = new BigInteger("123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0", 16).doubleValue();

如果需要提供十六进制分数,请按照上一个答案中的建议使用十六进制浮点字面值:

double d = 0x1F.1p1;