2016-03-27 8 views
0

は、以下のコードを見て:java - image.getRGB(x、y)のバイナリAND(&)演算。

image.getRGB(x,y) & 0x000000FF 

結果image.getRGB(x、y)は-16777216、AND演算結果が0(黒)である

結果画像です。 getRGB(x、y)は-1で、AND演算結果は255(WHITE COLOR)である

私の質問は、あなたがJava - Understanding about image.getRGB(x,y) output in Binary termに私の関連記事を見る場合はimage.getRGBの結果を見ることができる、である(X 、y)は、アルファ、レッド、グリーン、 d青(32ビット)だが0x000000FFは8ビットのみである。

image.getRGB : 1111 1111 0000 0000 0000 0000 0000 0000 
0x000000FF : 1111 1111 
image.getRGB & 0x000000FF : 0000 0000 

第2の例:例えば

彼らは結果0または255以上の私の場合のように取得するように、彼らは32ビットimage.getRGBで0x00000FFの8ビットの間で比較する方法
image.getRGB : 1111 1111 1111 1111 1111 1111 1111 1111 
0x000000FF : 1111 1111 
image.getRGB & 0x000000FF : 1111 1111 

+0

本当に間違っていませんか?このコード出力は 'System.out.println(0xFF << 24&0xFF); →0' 'System.out.println(Color.black.getRGB()); →-16777216' 'System.out.println(Color.black.getRGB()&0xFF); →0' – Maljam

+0

@maljam:申し訳ありませんが、私は私の質問を編集しました。上記をもう一度確認することができます。ありがとう – Michael

+0

'-16777216' ==' 0xFF00000' –

答えて

4

は、単に数字と考える、とにかかわらず、ビット数の、あなたは一緒に2の同じパワーを表すビットで数字を合わせた後、二項演算を実行する必要があります。

im.getRGB :  1111 1111 0000 0000 0000 0000 0000 0000 
0x000000FF :  0000 0000 0000 0000 0000 0000 1111 1111 
        ^^^^ ^^^^      ^^^^ ^^^^ 
im.getRGB & 0xFF: 0000 0000 0000 0000 0000 0000 0000 0000 = 0 

同じこと他の例:

im.getRGB :  1111 1111 1111 1111 1111 1111 1111 1111 
0x000000FF :  0000 0000 0000 0000 0000 0000 1111 1111 
        ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ 
im.getRGB & 0xFF: 0000 0000 0000 0000 0000 0000 1111 1111 = 255 
+0

素晴らしい答え!ありがとう! – Michael