タグ付けされた質問 「bit-manipulation」

個々のビットの操作。使用される演算子には、ビット単位のAND、OR、XOR、NOT、左シフト、および右シフトがあります。

4
Cコンパイラがスイッチを最適化する理由と異なる場合
最近、奇妙な問題に遭遇したとき、私は個人的なプロジェクトに取り組んでいました。 非常にタイトなループでは、0〜15の値の整数があります。値0、1、8、9の場合は-1を取得し、値4、5、12、13の場合は1を取得する必要があります。 私はいくつかのオプションを確認するためにgodboltを使用しましたが、コンパイラーがifチェーンと同じ方法でswitchステートメントを最適化できないようであることに驚きました。 リンクはここにあります:https://godbolt.org/z/WYVBFl コードは次のとおりです。 const int lookup[16] = {-1, -1, 0, 0, 1, 1, 0, 0, -1, -1, 0, 0, 1, 1, 0, 0}; int a(int num) { return lookup[num & 0xF]; } int b(int num) { num &= 0xF; if (num == 0 || num == 1 || …

3
C ++で1 << 2と1 << 3を合計したときの奇妙な出力
したがって、私はC ++で少し操作を試みただけです。これが私が試したものです: int a = 1&lt;&lt;2; cout&lt;&lt;a; これは出力をとして与えます4。 int a = 1&lt;&lt;3; cout&lt;&lt;a; これは出力を次のように与えます 8 しかし、私がするとき: int a = 1&lt;&lt;2 + 1&lt;&lt;3; cout&lt;&lt;a; それはとして出力を与えます64。なんでそうなの? 私も試しました: int a = 1&lt;&lt;2; int b = 1&lt;&lt;3; cout&lt;&lt;a + b; 12期待どおりに出力が得られます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.