我该如何在Java中将表示为有符号Java等效项的无符号int或long转换为float或double?我在Google Guava库(Link)中找到了一些提示,但我不理解实现背后的原理。这是一个将存储在
据我所了解,第一个检查是必要的,以检查值是否为负数,因为
value
中的无符号长整型转换为浮点数的代码片段:198 @Override
199 public float floatValue() {
200 @SuppressWarnings("cast")
201 float fValue = (float) (value & UNSIGNED_MASK);
202 if (value < 0) {
203 fValue += 0x1.0p63f;
204 }
205 return fValue;
206 }
据我所了解,第一个检查是必要的,以检查值是否为负数,因为
UNSIGNED_MASK
为Long.MAX_VALUE
。在这种情况下,转换符合Java中long到float的语义。但如果值为负数,为什么要添加一个常量?