私はこれを数回見ましたが、ビットシフトを使用すると読みやすさが妨げられているようです。なぜ使用されていますか? 2倍したほうが速いのですか?「* 2」の代わりに「<< 1」を使用する利点はありますか?
答えて
* 2コールを最適化しない古いコンパイラでは、左シフト命令を発行する方が高速です。その最適化は本当に検出が容易で、まともなコンパイラはすでにそうです。
読みやすさに影響する場合は、使用しないでください。最も明快で簡潔な方法でコードを書いてください。スピードの問題があれば、プロファイリングして手の最適化を行ってください。
一部のアーキテクチャでは、ビットシフトは乗算より高速です。しかし、その塩の価値があるコンパイラは、左のビットシフト(ビットシフトが速い場合)に対して* 2(または2のべき乗による任意の乗算)を最適化します。
古いCコンパイラを使用している場合は、ビット単位で使用することをお勧めします。読みやすくするために、あなたはコードをコメントすることができます。
乗算するときは*を使用し、ビットシフトするときは< <を使用します。それらは数学的には同等ですが、意味の意味が異なります。たとえば、フラグフィールドを作成する場合は、ビットシフトを使用します。合計を計算する場合は、乗算を使用します。
非常に良い点。ビットを1つ左に移動したい場合は、 '<< 1'を使います。 2倍の大きさにしたい場合は、 '* 2'を使います。同じ効果がありますが、数字を使用しているものははっきりとわかります。 – nickf
+1。あなたのコードに** intent **を表現し、コードをプロファイリングしていない限り、コンパイラを推測しないでください。 –
これは、作業するデータの個々のビットに関係する場合に使用します。あなたは0x9A
にワードの上位バイトを設定したい場合たとえば、あなたはあなたが書きたい
n |= 0x9A * 256
を書きません:
n |= 0x9A << 8
これは、あなたが作業しているということが明確になりますビットで表現されています。ビットフィールドとして使用される値の可読性のため
:私はどちらか '= 1、...、= 2、... = 4' または「= 1に好適であると考え
enum Flags { UP = (1<<0),
DOWN = (1<<1),
STRANGE = (1<<2),
CHARM = (1<<3),
...
、.. 。= 2、= 2 * 2、... = 2 * 3 '特に8+のフラグがある場合。
- 1. リンクの代わりにボタンを使用する利点はありますか?
- 2. Bash:exit $ 1の代わりにexit $ {1:0}を使用する利点
- 3. AJAX:XMLHttpRequestの代わりにjQueryの.ajax()を使用する利点?
- 4. スプリングバッチの代わりにSpringクラウドデータフローを使用する利点
- 5. epoll_create()の代わりにepoll_create1()を使用する利点
- 6. フォアグラウンドサービスにContext.startService(Intent)の代わりにContext.startForegroundService(Intent)を使用することに利点はありますか?
- 7. <代わりに&LT
- 8. SharedPreferencesの代わりにDataLayersを使用することに不利な点はありますか?
- 9. Python C ExtensionsにPy_XDECREFの代わりにPy_DECREFを使用する利点はありますか?
- 10. 容器内の未加工のポインタの代わりにreference_wrapperを使用する利点はありますか?
- 11. Kinect SDK 2.0の本文インデックスの代わりにボディIDを使用する利点はありますか
- 12. 静的メインの代わりにオブジェクトベースのrun()メソッドを使用する利点はありますか?
- 13. mongodbコレクションの代わりにsettings.jsonを使用する利点はありますか?
- 14. ポインタの代わりにグローバル変数を使用する利点はありますか?
- 15. unsigned intの代わりにsize_tを使用する利点はありますか?
- 16. プレーンストリングの代わりにObjectIdを使用する利点は何ですか?
- 17. springの代わりにthymeleaf jspを使用する利点は何ですか
- 18. forループの代わりにFluxを使用すると、どんな利点がありますか?
- 19. <input>タグを使用する代わりにclickCountを印刷する方法はありますか
- 20. boost :: shared_arrayの代わりにstd :: shared_ptr <std::vector>を使用するのは意味がありますか?
- 21. <head><head>の代わりに<head>の内容が<body>にあります。
- 22. ニューラルネットワークにテンソルフローを使用する利点はありますか?
- 23. xmlを使用する代わりにオブジェクトをシリアル化する利点
- 24. <iframe>は、静的ページ/ウェブの代わりに "PHPインクルード"の代わりに使用できます
- 25. getterの代わりにivar変数を使用する利点について
- 26. Else Ifの代わりにIf/Elseを入れ子にする利点はありますか?
- 27. クラスパスを使用する代わりにOSGi環境を利用するJavaコンパイラはありますか?
- 28. プライベートメソッドの代わりにFunc <T>を使用する必要がありますか?
- 29. cat << EOFの代わりに<< EOFを使用してみませんか?
- 30. 直接のインテントの代わりにバンドルを使用する利点
これは簡単にテストできます。ちょうどそれをテストします。 –
? 「時間」を使うことによって? –