Java 无符号除法不强制转换为长?

标签 java unsigned division

我编写了一个解释器,要求我对无符号整数执行 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/

相关文章:

java - objective-c 中的 toByteArray 等价物

C++:仅使用无符号类型时有符号/无符号不匹配

math - 有符号整数中的前导 1 表示负数从何而来?

java - 去除字符串中的重复字符

java - 如何在 Java 中填充通用列表的列表?

javascript - 如何为多个 div 表单创建上一个和下一个按钮?

算法:Donald Knuth 除法算法困惑

Python:除法<0.1时执行除法与地板除法时的不同结果

java - onActivityResult 崩溃

c - 我在 x 中出现了多少次(无符号 32 位整数 C)