【发布时间】:2015-10-20 08:49:18
【问题描述】:
如何在 Java 中将表示为已签名 Java 等效项的 unsigned 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,因此必须首先检查该值是否为负数。在这种情况下,转换与从 long 到 float 转换的 Java 语义相匹配。但是,如果值为负,为什么要添加一个常量呢?
【问题讨论】: