私は小さなプロジェクトに取り組んでいます。Google での検索中に、 java にいくつかのコードが表示されます。
int red = (pixel >> 16) & 0x000000FF;
しかし、私はそれが何を意味するのか理解していませんか?その論理演算の概要を説明できる人はいますか? そのようにシフトされていると読みましたが、何のシフトですか?
私は小さなプロジェクトに取り組んでいます。Google での検索中に、 java にいくつかのコードが表示されます。
int red = (pixel >> 16) & 0x000000FF;
しかし、私はそれが何を意味するのか理解していませんか?その論理演算の概要を説明できる人はいますか? そのようにシフトされていると読みましたが、何のシフトですか?
これはビットごとの「AND」演算子です。数値 (16 進数) に適用されるとFF
、最後の 8 を除く int のすべてのビットがクリアされます。
ビットごとの「AND」は数値のバイナリ表現を通過し、両方のオペランドが 1 を持つ位置にのみ結果に 1 を入れることを思い出してください。を含む 32 ビット マスクFF
はバイナリで次のように見えるため、
00000000000000000000000011111111
結果の上位 3 バイトはゼロになります。すべてが 1 の最後FF
のバイトは、最初のオペランドの最後のバイトと等しくなります。
& - ビットごとの AND 演算子
>> - 右シフト演算子 - ビット パターンを右にシフトします
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
例えば
バイナリ 100 の 4。>>1 を実行すると 010 になり、2 になります。
バイナリ 1000 の 8。>>1 を実行すると 0100 になり、4 になります。
こちらもご覧ください