【发布时间】:2016-09-26 07:52:27
【问题描述】:
我有一些 C 代码,我正在通过大量位级操作将其转换为 java。
我有以下代码:
float test(float uf) {
return uf ^ (1 << 31);
}
在原始 C 代码中,uf 是一个无符号值。由于 java 没有无符号值,我将 uf 更改为浮点数。现在,我收到一个错误,说第一个类型是浮点数,第二个是整数。
我知道有它的库,但我只是想使用位操作只是为了看看我可以出于好奇使用位操作对 Java 做什么。
那么,我的第一个问题是,是否可以在不使用库的情况下使用 Java 执行上述操作?其次,有什么理由不应该在 java 中工作(除了有库可以为你做这件事之外)?
【问题讨论】:
-
您当然可以实现自己的“浮点位移”,但there is no built-in bitshift on non-integral primitives in Java。至于你的第二个问题:非整数类型的位移对人类来说比整数类型更难解释。因此,可以提出这样的论点,即这种操作会降低代码的可理解性。
-
您已经破坏了您的代码:任意 32 位值(您的典型无符号值)不完全适合只有 24 位尾数的 32 位浮点数。会有截断。所以将 unsigned 转换为 float 是行不通的。您也许可以尝试双打……但我怀疑您的想法已被打破,您应该尝试其他方法。如果您正在在 C 中使用 32 位整数,那么在 Java 中尝试使用 64 位长。
-
你可以用 int 模拟 uint 就好了。你不能用float模拟uint。
-
如果你真的想操作
float的位,你可以使用Float.floatToIntBits(float)。但这听起来并不是你想要做的。 -
@Sam 是的,我正在尝试仅使用位操作。
标签: java floating-point bit-manipulation