在Java中,按位不是双倍的

Hyp*_*ino 1 java bits

在Java中,按位非运算符(~)反转整数或长整数位.但为什么这不可能double?是否有任何使用此操作的方法double?我正在用Java编写自己的编程语言(这不是一个家庭作业),我相信应该包括双位的按位.

任何使用按位而不是双打的方法?

编辑:这不是如何对浮点数执行按位操作的重复,因为我使用Java而不是讨论过的C.我也知道使用语言的语法没有可能的方法,但是答案似乎把它投到了double一个int.我需要保持双倍的原样,而不是将其改为intlong.

编辑:按位不是我认为不会.它似乎*-1 - 1在输入上执行.因此,我的问题现在变成:

我希望将双精度变为二进制(请参阅我的另一个问题 ),将所有位(0到1和1到0)反转,然后将其转换回double.

rge*_*man 6

Java没有~为浮点类型提供运算符float,double因为这样的操作没有意义.

您可以使用此方法模拟它:

public static double performNotOnDouble(double d)
{
    return Double.longBitsToDouble(~Double.doubleToLongBits(d));
}
Run Code Online (Sandbox Code Playgroud)

但结果没有任何实际意义:

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
Run Code Online (Sandbox Code Playgroud)

采用浮点类型的位补码是没有意义的,因为结果没有任何意义.

  • 它可能意味着某些东西,但是它到底是什么并不明显 (2认同)