我编写了一个解释器,要求我对无符号整数执行 32 位除法。在 Java 中,我可以这样做:
reg[a] = (int) ((reg[b] & 0xFFFFFFFFL) / (reg[c] & 0xFFFFFFFFL));
但我想避免转换为 long 并返回 int。 Java 已经为这种特殊情况提供了无符号右移运算符 >>>
,因此也许有一种聪明的方法可以以相同的方式进行无符号除法。
请注意,加法和乘法可以很好地工作,因为两个的补码可以正常工作。
在 Java 中有没有更好的方法来做到这一点?
最佳答案
在 Java 8 及更高版本中,Integer
具有对无符号 int
的完整操作集合
reg[a] = <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#divideUnsigned-int-int-" rel="noreferrer noopener nofollow">Integer.divideUnsigned</a>(reg[b], reg[c]);
关于Java 无符号除法不强制转换为长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1931904/