我编写了一个解释器,要求我对无符号整数执行32位除法。在Java中,我可以这样做:
reg[a] = (int) ((reg[b] & 0xFFFFFFFFL) / (reg[c] & 0xFFFFFFFFL));
但我想避免转换为long并返回int。 Java已经为这种特殊情况提供了无符号右移运算符>>>
,所以也许有一种聪明的方法可以用同样的方式进行无符号除法。
请注意,添加和乘法工作正常,因为两个赞美数字才起作用。
Java有更好的方法吗?
答案 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可能更整洁)?