質問

私は、符号なし整数の32ビットの除算を実行するために私を必要とインタプリタを書かれています。 Javaでは、私はこれを行うことができます。

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

しかし、私は長い間、バックint型へのへの変換を避けたいです。 Javaがすでにその特殊な場合のための符号なし右シフト演算子>>>を与えるので、多分同じ方法で符号なし除算を行うための巧妙な方法があります。

追加し、2の補数番号がうまく動作するので、細かい作業を掛け

注ます。

これを行うには、Javaのより良い方法はありますか?

役に立ちましたか?

解決

あなたは1ビットシフトダウンした場合(結果の数が4倍小さいことになるので)

さて、あなたは2回シフトアップ、結果として2つの数値を分けることができます。あなたは最下位ビットを失うことになるので、しかし、それだけで、偶数で動作します。

私は本当にそれはあなたにその状態をチェックする任意の時間を節約するとは思いません。 (又は2 31 次に小さい番号を確認)

他のヒント

あなたは、常に任意のサイズの整数上で動作BigIntegerを使用でき、それはlongintとしてキャストバックする促進よりも多く高価です。パフォーマンスを向上させるためにあなたの意図がある(のBigIntegerが滑らかな印象かもしれません、その場合には)、またはコードがどのように読みやすい/理解し改善するために(それゆえ、あなたがキャストのための時間を避けるために、「純粋な整数」ソリューションをしたい)?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top