メモリ内のビットのパターンについて考える方法は複数あります。通常、整数に格納されたビットは1つの数値を表すものと考える。上位ビットを下位ビットよりも大きい値に寄与し、それらの値は、単一の数に到達するために加算されるので、以下のパターン:
00001101 00110000 00000111
に解釈されるように:
2^0 + 2^1 + 2^3 + 2^13 + 2^14 + 2^15 + 2^17 + 2^18 = 864,263
しかし、このパターンは3つのという8ビットの数字の個別のグループ(それぞれが色成分の数値を表す)として考えることが自由です。しかし、上位ビットのビットパターンを表現しようとする数に変換するには、それらのビットを右端の8ビットグループにあるように解釈する必要があります。これが私たちがシフトする理由です。
たとえば、左端の8ビットグループの値を取得するには、そのグループに含まれていないすべてのビットをマスクし、次にそれらのビットを右に16桁移動して右端の位置に配置する必要があります。
// first, assume n = 00001101 00110000 00000111
(n & 0xFF0000) >> 16 // red
ゼロは自動的に残して、空いたビットにシフトさ:
私たちが今のように解釈できる
00000000 00000000 00001101
:
13
値これらの成分の一つの他の方向にシフトする必要が設定
(n & 0x00FF00) >> 8 // green
n & 0x0000FF // blue (no shift necessary)
:0
同様に、我々は、中央のビットと右端のグループの値を算出することができます。例えば、中央の8ビット位置に次のシフト75
:
n = (n & (0xFF00FF)) | (75 << 8)
我々は最初(0xFF00FF
マスクを有する)緑色値をリセットした後、左に数75
8ビットシフトしています。最後に、これら2つの数値を組み合わせます。
私たちは、これが再び出て、それをシフトさせることにより動作することを確認できます。
(n & 0x00FF00) >> 8 // => 75
コンポーネントの 1をリセットまたは最大化がさらに簡単です。
: n = n & 0xFF00FF // clear out green
以下マスクが、一方、緑色成分の値を最大化:我々は、以前の例で見てきたように、ゼロINGの成分は次のように行うことができ
n = n | 0x00FF00
[ビットシフトへの完全な初心者ガイド](http://stackoverflow.com/questions/141525/absolute-beginners-guide-to-bit-shifting)と[その他多くの](http://検索q =何+ +ビット+シフト&提出=検索) –
本当に。私は彼が一般的にビットシフトではなく表現を理解しようとしていると思う。 –