このパターンを少しシフトする方法を探しています:
6 24 96
これらの数字はすべて2の倍数なので、シフトする方法があると思っていました
それらをシフトしてパターンを取得したいのですが、おそらくループで繰り返します
6,24,96,6,24,96...
プログラミング言語は重要ではありません、概念は
このパターンを少しシフトする方法を探しています:
6 24 96
これらの数字はすべて2の倍数なので、シフトする方法があると思っていました
それらをシフトしてパターンを取得したいのですが、おそらくループで繰り返します
6,24,96,6,24,96...
プログラミング言語は重要ではありません、概念は
数値に 2 nを掛けることは、数値をnビット左にシフトすることと同じです。4 を掛けるには、2 ビット左にシフトします。
06 10 = 00000110 2
24 10 = 00011000 2
96 10 = 01100000 2
このパターンをループさせたい場合は、単に左にシフトするのではなく、左に回転させることができます。左に 2 ビットを回転するには、左に 2 ビットをシフトしてから、ビット単位の OR で左端の 2 ビットを数値の右側に戻します。8 ビットの数値を扱う場合、これは C ライクな構文で次のように記述されます。
(n << 2) | (n >> 6)
興味深いことに、96 を 2 ビット左に回転させると、384 にはなりません。これは、8 ビット バイトが保持できるサイズよりも大きいためです。代わりに 129 が得られます。これは、1 ビットの 1 つが回転して右側に戻るためです。
006 10 = 00000110 2
024 10 = 00011000 2
096 10 = 01100000 2
129 10 = 10000001 2
もう一度 129 回転すると、最初の 6 に戻ります。
これを示すインタラクティブな Python セッションを次に示します。nを 10 進数およびゼロで埋められた 2 進数として{0:3}
フォーマットすることに注意してください。{0:08b}
>>> n = 6
>>> n = ((n << 2) | (n >> 6)) & 0xFF; print '{0:3} {0:08b}'.format(n)
24 00011000
>>> n = ((n << 2) | (n >> 6)) & 0xFF; print '{0:3} {0:08b}'.format(n)
96 01100000
>>> n = ((n << 2) | (n >> 6)) & 0xFF; print '{0:3} {0:08b}'.format(n)
129 10000001
>>> n = ((n << 2) | (n >> 6)) & 0xFF; print '{0:3} {0:08b}'.format(n)
6 00000110
>>> n = ((n << 2) | (n >> 6)) & 0xFF; print '{0:3} {0:08b}'.format(n)
24 00011000
>>> n = ((n << 2) | (n >> 6)) & 0xFF; print '{0:3} {0:08b}'.format(n)
96 01100000
>>> n = ((n << 2) | (n >> 6)) & 0xFF; print '{0:3} {0:08b}'.format(n)
129 10000001
>>> n = ((n << 2) | (n >> 6)) & 0xFF; print '{0:3} {0:08b}'.format(n)
6 00000110