【问题标题】:Recover long from int after precision loss精度损失后从 int 中恢复 long
【发布时间】:2015-03-04 21:30:06
【问题描述】:

我继承了一个应用程序,该应用程序采用 2281534395476 并将其错误地转换为整数 906761300。我希望从本质上将其取消转换为正确且正确的 (long) 数据类型。

什么是可以在列表上运行的可重现算法?我正在寻找伪代码或类似的东西,尽管最终结果将用 Ruby 编写。

【问题讨论】:

  • 这显然是不可能的,那些位已经消失了。或者你能以某种方式从其他信息或领域知识中推断出它们吗?
  • ...您想从int 恢复long?那是你要找的吗?如果是这样,不幸的是,答案是否定的,解决方案是将该变量的每次出现都更改为long
  • @harold 作为第一响应者,请添加答案以便我标记它
  • 你可以标记那个。我真的希望可以通过对这些数字所代表的一些知识来做一些有趣的事情,这样我就真的写不出任何有趣的东西了。

标签: algorithm casting int type-conversion long-integer


【解决方案1】:

当已经从long 转换为int 时,根本无法取回值。当您从long 转换为int 时,您会丢失一些位。因此,您无法通过使用通用算法找回这些位,也无法找回丢失的 long 值。

longint 使用相同位数的系统中,转换是微不足道的;它只是复制值。在这种情况下,您可能会取回该值。

longint 宽的系统上,如果long 值不适合int,则转换结果由实现定义。通常发生的情况是高位被丢弃。你的系统似乎是这个。因此,您无法取回 long 值。

【讨论】:

  • 其实“不可以”并不意味着“不能”。所以,我修改了那个。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
相关资源
最近更新 更多