StackOverflowでまだカバーされていないと思う特定のCビットシフトシナリオがあります。(もしそうなら、私はそれを見つけることができませんでした!)
この演習ではsigned int
、データ型としてsを使用しています。
値を取得します0x80000000
(最上位ビットの1にすぎません)。
算術右シフトを使用して、マシン上で1回右シフトします(私の場合はそうです)。
結果= 0xC0000000
(左端のバイトで1100 0000)。
それをシフトし続けると、左から右に、ものでいっぱいになるはずです。
結果= 0xFFFFFFFF
(すべてのもの。)
ただし 、同じ例を試してみてください。ただし、1つ余分な位置をすべて一緒にシフトします。
0x80000000 >> 0x00000020
(右シフト32回)
あなたの結果は?知らない。私の結果はすべてのものではありませんでした。実際、私は0x00000001
それが私の望ましい行動ではなかったと思いました。どうしてこれなの?マシン固有ですか?
(コンテキスト:パズルを解くために私の操作を数ビット演算子に制限する宿題の割り当て。これはパズルの側面ですが、質問全体からはほど遠いです。)