java - 按位不适用于 Java 中的 double

标签 java bit

在 Java 中,按位非运算符 (~) 反转整数或长整数的所有位。但为什么这对于 double 是不可能的?有什么方法可以在 double 上使用这个操作吗?我正在用 Java 编写自己的编程语言(这不是家庭作业),我认为 double 应该包括按位。

有什么方法可以在 double 上使用 bitwise not 吗?

编辑:这不是 How to perform a bitwise operation on floating point numbers 的副本,因为我使用的是 Java 而不是讨论的 C。我也知道没有可能使用该语言的语法,但那里的答案似乎将 double 转换为 整数。我需要保持 double 不变,而不将其更改为 intlong

编辑:按位非不是我想的那样。它似乎对输入执行 *-1 - 1 。因此,我的问题现在变成了:

我希望将 double 转换为二进制(参见我的另一个问题 ),反转所有位(0 到 1 和 1 到 0),然后将其转换回 double 。

最佳答案

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

你可以用这个方法来模拟:

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/

相关文章:

java - 如果 ","在一个字段中,即使用“引用”,Jackson CSV 解析器也会阻塞逗号分隔值文件

java - 如何根据特定顺序对 hibernate 结果进行排序

c - 十进制数转换为 16 位二进制 (C)

java - 我想从多个工作表的 Excel 文件中读取大于 10 mb 的数据

java - 如何在 Kotlin 中使用游标加载器

php - 如何使用位域存储星期几?

java - Java 中将位打包到 byte[] 并读回的最有效方法是什么?

null - 使用 Entity Framework 4.1 Code First 时,当数据库中为 null 时,默认 bool 为 false

C : convert to integer using bits

java - 3rd party jar 的 Maven 导出不会通过 mvn install 导出