我已经写,需要我执行无符号整数的32位划分的解释器。在Java中,我可以做到这一点为:

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

但是,我想避免转化为长和背面为int。的Java已经给出了特殊情况下的无符号向右移位运算符>>>,所以也许有一个聪明的办法做到无符号除法以同样的方式。

请注意添加和乘,做工精细,由于两个的补数只是工作。

有没有在Java中有更好的方式来做到这一点?

有帮助吗?

解决方案

好了,如果通过一个位下移,可以划分所得的两个数字,则升档两次(因为所得数目将是小4倍)。但是,这只会在偶数工作,因为你将失去至少显著位。

我真的不认为这会节省你随时检查这一条件。 (或者检查对于较小然后2个数字 31

其他提示

您可以一直使用BigInteger,它在任意大小的整数工作,但是这将是一个很多比提升为long并投退为int更加昂贵。是你的意图,以提高性能(因此你想要一个“纯粹的整数”的解决方案,以避免强制转换的时间)或改善如何可读/理解的代码是(在这种情况下BigInteger的可能是整洁)?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top