Java无符号师没有铸造多久?

时间:2009-12-19 04:00:21

标签: java unsigned division

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

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

但我想避免转换为long并返回int。 Java已经为这种特殊情况提供了无符号右移运算符>>>,所以也许有一种聪明的方法可以用同样的方式进行无符号除法。

请注意,添加和乘法工作正常,因为两个赞美数字才起作用。

Java有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

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

我真的不认为这会为您节省任何时间来检查这种情况。 (或检查小于2 31 的数字)

答案 1 :(得分:1)

在 Java 8 及更高版本中,envsubst < text.txt | awk -F '[-:[:blank:]]+' -v ORS='\0' '{print $2}' | xargs -0 mkdir -p 对未签名的 Integer 进行了完整的操作集合

int

答案 2 :(得分:-1)

你总是可以使用BigInteger,它适用于任意大小的整数,但这比宣传到long并转回int要贵得多。您是否打算提高性能(因此您需要一个“纯整数”解决方案来避免演员阵容的时间)或改善代码的可读性/可理解性(在这种情况下BigInteger可能更整洁)?