代码之家  ›  专栏  ›  技术社区  ›  Adam Goode

Java无符号划分无需铸造多长时间?

  •  4
  • Adam Goode  · 技术社区  · 15 年前

    我写了一个解释器,它要求我执行无符号整数的32位除法。在Java中,我可以这样做:

    reg[a] = (int) ((reg[b] & 0xFFFFFFFFL) / (reg[c] & 0xFFFFFFFFL));
    

    但我希望避免转换为long,回到int。Java已经给出了无符号右移运算符。 >>> 对于这种特殊情况,也许有一种聪明的方法来做无符号除法。

    注意,加法和乘法运算很好,因为两个恭维数只起作用。

    在Java中有更好的方法吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Chad Okere    15 年前

    好吧,如果你向下移动一位,你可以将得到的两个数字分开,然后向上移动两次(因为得到的数字会小4倍)。但这只适用于偶数,因为你会失去最不重要的一点。

    我真的不认为这能节省你检查病情的时间。(或检查小于2的数字 三十一 )

        2
  •  -1
  •   Ash    15 年前

    你可以一直用 BigInteger ,它对任意大小的整数起作用,但这比升级到 long 然后作为 int . 您的目的是提高性能(因此希望使用“纯整数”解决方案来避免强制转换时间)还是提高代码的可读性/可理解性(在这种情况下,bigInteger可能更简洁)?