java-image.getRGB(x,y)的二进制和(&;)操作;

java-image.getRGB(x,y)的二进制和(&;)操作;,java,image,binary,rgb,Java,Image,Binary,Rgb,请看下面的代码: image.getRGB(x,y) & 0x000000FF 当结果image.getRGB(x,y)为-16777216时,AND运算结果为0(黑色) 当结果image.getRGB(x,y)为-1时,AND运算结果为255(白色) 我的问题是,如果你查看我在中的相关文章,你可以看到image的结果。二进制项中的getRGB(x,y)包括Alpha、红色、绿色和蓝色(32位),但0x000000FF只有8位;例如: image.getRGB : 1111 1111

请看下面的代码:

image.getRGB(x,y) & 0x000000FF
当结果image.getRGB(x,y)为-16777216时,AND运算结果为0(黑色)

当结果image.getRGB(x,y)为-1时,AND运算结果为255(白色)

我的问题是,如果你查看我在中的相关文章,你可以看到image的结果。二进制项中的getRGB(x,y)包括Alpha、红色、绿色和蓝色(32位),但0x000000FF只有8位;例如:

image.getRGB : 1111 1111 0000 0000 0000 0000 0000 0000
0x000000FF : 1111 1111
image.getRGB & 0x000000FF : 0000 0000
第二个例子:

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

它们如何将0x00000FF的8位与32位image.getRGB进行比较,从而得到与上述情况类似的结果0或255?

简单地将它们视为数字,无论位数多少,都应将数字与表示相同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

简单地把它们想象成数字,不管位数是多少,都应该将数字与表示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

你确定你没有弄错吗。此代码输出:
System.out.println(0xFF@maljam:对不起,我的问题已被编辑。您可以在上面再次检查。谢谢
-16777216
=
0xFF00000
您确定没有错。此代码输出:
System.out.println(0xFF@maljam:对不起,我的问题已被编辑。您可以在上面再次检查。谢谢
-16777216
=
0xFF00000
回答得好!谢谢!回答得好!谢谢!