在 Java 中,按位非运算符 (~
) 反转整数或长整数的所有位。但为什么这对于 double
是不可能的?有什么方法可以在 double
上使用这个操作吗?我正在用 Java 编写自己的编程语言(这不是家庭作业),我认为 double 应该包括按位。
有什么方法可以在 double 上使用 bitwise not 吗?
编辑:这不是 How to perform a bitwise operation on floating point numbers 的副本,因为我使用的是 Java 而不是讨论的 C。我也知道没有可能使用该语言的语法,但那里的答案似乎将 double
转换为 整数
。我需要保持 double 不变,而不将其更改为 int
或 long
。
编辑:按位非不是我想的那样。它似乎对输入执行 *-1 - 1
。因此,我的问题现在变成了:
我希望将 double 转换为二进制(参见我的另一个问题 ),反转所有位(0 到 1 和 1 到 0),然后将其转换回 double 。
最佳答案
Java 没有为浮点类型 float
和 double
提供 ~
运算符,因为这样的操作没有意义。
你可以用这个方法来模拟:
public static double performNotOnDouble(double d)
{
return Double.longBitsToDouble(~Double.doubleToLongBits(d));
}
但是结果没有任何实际意义:
0.0: NaN
1.0: -3.9999999999999996
10.0: -0.43749999999999994
-1.0: 3.9999999999999996
0.01: -440.31999999999994
3.141592653589793: -1.4292036732051032
2.718281828459045: -1.6408590857704772
Infinity: -2.225073858507201E-308
-Infinity: 2.225073858507201E-308
NaN: -1.1125369292536E-308
对浮点类型进行位补是没有意义的,因为结果没有任何意义。
关于java - 按位不适用于 Java 中的 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631679/