2017-12-04 10 views
-5

の左シフトを<<使用なぜ、人は乗算を達成するために左シフトを使用しています。たとえば、3 * i、一部の人々はiを使用することを好む< < 1 + i、左シフトを使用して共通のもの以上の利点はありますか?多くの人が代わりに多くのコードで乗算

+4

シフトが速くなります。次に、良いコンパイラはとにかく乗算を最適化します。 –

+1

ポイントがないので、これを行う人はほとんどいません。 –

+3

これらの多くの人々は、1980年代に固執しているか、最適化コンパイラを最適化できないと考えています。多分彼らはできる。ほとんどの場合、そうすることはできません。 – user4581301

答えて

4

私の頭に浮かぶ1つの理由は、ビット単位の操作が実行されているという点です。コードは、16進数(意見の問題)を使用するよりも、このスタイルの表記法でより明確になり、より明確になります。

例えば - 第三ビットがセットされているポイントを作るためのエンジニアは、この場合には、コンパイラは完全にこれを離れて最適化すると0x08のの割り当てと交換することを

uint32 foo = 1 << 3; 

注意を行う可能性があります。第3ビットの設定は非常に明確です。

これは、埋め込みプログラミング、暗号化、および私の頭に飛びついていない他のビット特有のツイッディングで多く使用されています。

パフォーマンスの最適化のためのものではありません。コンパイラは2倍の最適化を期待できます。いずれの場合でも、ほとんどのアプリケーションでこのような利点を認識することはまずありません。

ただし、3*ii << 1+iに置き換えられていますが、同じ操作ではないため、不良です。

+0

いいえ、例は(i << 1)+ iであり、それらは同じものです –

+0

@zhichaiあなたの例は 'i << 1 + i'ではありません(i << 1)+ i違いは+ is優先順位が高くなり、最初に実行されます。 – UKMonkey

+0

私の間違いは、() –

関連する問題