2

嗨,感谢您的帮助,

(使用Java)我已经四处寻找将Double转换为base 2(仍然是double),但我找不到简单的方法。我读到,鉴于 Doubles 是如何编码的,像 Double.doubleToRawLongBits() 这样的方法可以给出 Base 2 但有不同的解释。

使用以下方法转换 int 非常简单: Integer.toString(x, 2)

我想知道是否有人知道将 Double 转换为它的 base 2 对应的 Double 的简单方法?如果转换后我有一个 Double = 0.25,我希望看到一个 double = 0.01。

谢谢

4

2 回答 2

4

您可以提取这样的部分double

long val = Double.doubleToRawLongBits(d);
int sign = (int) (val >>> 63);
int exp = (int) ((val >>> 52) & 2047);
long mantissa = val & ((1L << 52) - 1);

之后,您可以打印尾数Long.toString(mantissa, 2)和指数并随心所欲地签名。这假设正常数字。

于 2014-01-01T20:14:38.680 回答
0

不依赖于二进制表示的跨平台解决方案double

String result = "";
if (x < 0) { result = "-"; x = -x; }
result += Integer.toString((int)x, 2);
double frac = x - (int)x;
int digits = 0;
while (frac > 0 && digits < MAX_DIGITS) {
  if (digits == 0) result += ".";
  frac *= 2; // now 0 < frac < 2
  result += Integer.toString((int)frac, 2); // it's 0 or 1
  frac = frac - (int)frac;
  digits++;
}
于 2014-01-01T20:19:06.240 回答