【问题标题】:Java multiplication of same number returns different output in Python相同数字的Java乘法在Python中返回不同的输出
【发布时间】:2020-12-15 13:25:49
【问题描述】:

我正在将一些 Java 代码移植到 Python,但由于某种原因,结果有所不同。

Java

int vi = 3997125 * 3997125;

Output: -270075495

Python

vi = 3997125 * 3997125

Output: 15977008265625

如何在 Python 中完成 Java 返回的相同输出?

【问题讨论】:

  • 你想要python中的错误(溢出)结果?
  • 是的。有点奇怪,我知道。 @MichaelSzczesny
  • 在 Java 中,int 是有符号的,因此 2^31 以上的任何内容都将被视为负数。因此,如果输出 > 2^31 则改为 2^31 - (value)。

标签: java python multiplication


【解决方案1】:

Java sn-p overflows。为避免这种情况,您可以使用longs:

long vi = 3997125L * 3997125L;

【讨论】:

    【解决方案2】:

    用溢出模拟python整数到32位整数值的转换

    def bit32(value):
        shift =  1 << 32
        return value % shift - shift if value.bit_length() >= 32 else value
    bit32(3997125*3997125)
    

    输出:

    -270075495
    

    【讨论】:

    • 更新了我的答案以使用整数而不会溢出。
    【解决方案3】:

    声明为int 类型的变量的范围是 -2,147,483,648 到 2,147,483,647。

    所以当你这样做时

    3997125 * 3997125 = 15,977,008,265,625
    

    这超出了 int 类型的范围。

    按照建议,您可以将类型更改为 long 。

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 2020-04-18
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2022-08-04
      相关资源
      最近更新 更多