何年も前に大学で、1ビット右シフトすることで2で除算するのと同じことを実現できることを学びましたが、通常はかなり高速です。 Javaが9-10年前に私がそれについて学んで以来、その点でどのようにやってきたのかわかりません。Javaコンパイラは自動的に2で除算してビットシフト演算を実行するか、手動でコード内のビットシフト演算を手動で実行する必要がありますか?
あなたがビットシフトが一般的であるショップとコードベースで働いていない限り、私見では、難読化のリスクがあります。はい、式は論理的に同等ですが、
これはすべて相対的であり、繰り返しになりますが、実際にはショップの基準によって異なります。同僚がビットシフトを愛するなら、ぜひともビットシフトしてください。
最新のコンパイラーは、2での除算のための最速のコードを生成するのに十分なほど賢いです。それが速い場合、彼らはシフトを行います。達成したいものが2による除算である場合、除算を使用するとコードがより明確になります。そして、分割する数が負の場合、問題を回避します。
はい、これはコンパイラの最適化を試みる誰もが行う最初のことであり(少なくとも50年間行われています)、おそらくJava JITコンパイラ、そしておそらく、それを実行しないコンパイラを見つけるのは非常に困難です。
そして、そうしなかったとしても、コードをより明確にするために避けるべきである時期尚早のマイクロ最適化です。
CPUの除算ルーチンがこれを処理します。あなたがそれをする必要はありません。
これは時期尚早の最適化として知られています。