問題タブ [bit-shift]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
8 に答える
11478 参照

c - C のビットシフトガイドはどこにありますか?

ビットごとのシフト (ビットシフト) 演算子とは何ですか? どのように機能しますか? 、しかし、ビットシフトの概念はまだ理解するのが難しいと思います。

誰かが C でビット シフトするためのより基本的なガイドの方向に私を向けることができますか? 主題全体をカバーする必要があるため、非常に長いものになると思います。

私はC プログラミング言語(別名 K&R) を学んでおり、それが目的なので、演習を行うことができます。基本はわかったのですが、いまだに正しいビットシフト演算ができません。

これが私を困惑させたK&Rの演習です

練習問題 2-6: 位置 p から始まる n ビットを y の右端の n ビットに設定し、他のビットは変更せずに x を返す関数 setbits(x, p, n, y) を書きなさい。

演習 2-7: 位置 p から始まる n ビットを反転して (つまり、1 を 0 に、またはその逆に) x を返し、他は変更しない関数 invert(x, p, n) を書きなさい。

演習 2-8: n ビット位置だけ右に回転した整数 x の値を返す関数 rightrot(x, n) を書きます

演習 2-9: 2 の補数系では、x &= (x-1) は x の右端の 1 ビットを削除します。理由を説明し、この観察結果を使用して、ビットカウントのより高速なバージョンを記述します。

これらは、k&R (C プログラミング言語) の本からの演習です。これは最高の C の本ですが、ビット シフトを理解するのに苦労しているので、これらの演習に問題があります。

0 投票する
9 に答える
7333 参照

c - C プログラミングで乗算と除算を使用してビットをシフトできますか?

>>and を使用し<<てシフトする代わりに、 and を使用*/て左右にシフトすることは可能ですか?

8 ビットの場合: 0x01 * 2 = 0000|0010。

0 投票する
4 に答える
2670 参照

c - このビットごとの右シフトが機能しないように見えるのはなぜですか?

マスクがまったく右にシフトしない理由を誰かに説明してもらえますか? その 1 の代わりに何でも使用でき、結果は同じになります。

0 投票する
3 に答える
2101 参照

c# - 32 ビット値をシフトするときに、シフト オペランドの下位 5 ビットのみを使用するのはなぜですか? (例: (UInt32)1 << 33 == 2)

次のコードを検討してください。

(32 より大きいシフトの使用に関する) 警告は生成されないため、予期される動作である必要があります。

生成されたアセンブリに実際に出力されるコード (または少なくとも Reflector によるコードの解釈) は次のとおりです。

IL (ここでも Reflector を使用) は

が起こっているのか理解しています ( MSDNで説明されています)。コードがコンパイルされると、32 ビット値をシフトするときに下位 5 ビットのみが使用されます...なぜこれが起こるのか知りたいです。

shift33a出てくる方法は、ILのc#プレゼンテーションが別のものにコンパイルされるため、Reflectorで何かが正しくないと私に思わせます)

質問):

  • 「シフトする値」の下位 5 ビットのみが使用されるのはなぜですか ?
  • 「31 ビットを超えてシフトしても意味がない」場合、警告がないのはなぜですか?
  • これは下位互換性の問題ですか (つまり、これはプログラマーが「期待」するものですか)?
  • 基礎となる IL は 31 ビットを超えるシフトを行うことができますが (のようにL_0010: ldc.i4.s 0x21)、コンパイラが値をトリミングしているというのは正しいですか?
0 投票する
7 に答える
29725 参照

c# - 左ビットシフト 255 (バイトとして)

以下がコンパイルされない理由を誰か説明できますか?

エラー:

定数値 '510' は 'byte' に変換できません

私はバイナリで次を期待しています:

型変換は私を困惑させました。

0 投票する
4 に答える
4412 参照

c# - オーバーフローしたビットを変数の他の先端に移動するC#ビット単位のシフト演算子はありますか?

それを「<<<」と呼びましょう

等しい

(<<および>>がオーバーフローしたビットを破棄すると仮定します)

そのようなオペレーターはいますか?

0 投票する
6 に答える
27444 参照

c++ - ゼロ ビットによるビット シフトは正しく機能しますか?

次のような関数があるとします。

毎回異なるサイトから呼び出され、bitCount負でなく、 のビット数の範囲内になりますint。私は特にbitCountゼロに等しい呼び出しについて心配しています-それは正しく動作しますか?

また、呼び出しサイトをコンパイルするときに関数のコード全体を確認しているコンパイラがbitCountゼロに等しい呼び出しをノーオペレーションに減らす可能性はありますか?

0 投票する
7 に答える
1923 参照

c# - C# でのビット シフトの混乱

次のような古いコードがあります。

長いので、次のように切り詰めることができると考えました。

しかし、最初の関数と同じ値が得られません。このバイトには 00000000 または 10000000 が含まれています。間違った演算子を使用していませんか?

0 投票する
5 に答える
26782 参照

c - ビット演算子と「エンディアン」

エンディアンはビットごとの操作でまったく問題になりますか? 論理的かシフトか?

ビット演算について宿題をやっているのですが、表も裏も作れず、エンディアンにかなりハマっていると思います。つまり、私はリトル エンディアン マシンを使用していますが (ほとんどのマシンと同様)、これを考慮する必要がありますか?それとも無駄な事実ですか?

念のため、C を使用しています。