-5

可能重复:
Java 中按位运算的好教程
是 &、|、^ 位运算符还是逻辑运算符?

代码如下:

int rgb[] = new int[] {     
(argb >> 16) & 0xff, //red     
(argb >>  8) & 0xff, //green     
(argb      ) & 0xff  //blue 
}; 

我看到一个从 INT 值获取 RGB 值的代码,操作如上,但我以前从未见过这样的操作,我想找到更多关于它们是什么以及它们能做什么的信息,符号 >> 和 &和 0xff。

那么,你们都用 Java 解决了哪些问题呢?

4

2 回答 2

5

位运算的进一步解释。让我们假设 int 位如下所示:

00000000 10101010 01010101 11011011
unused   red      green    blue

要获得蓝色的 int 值,您需要关闭除低 8 位之外的所有位。执行此操作的简单方法是使用按位与。0xff 也可以写成 0x000000ff,将高 24 位设置为 0,只打开低 8 中已经设置为 1 的位。

argb & 0xff ==> 00000000 00000000 00000000 11011011
                                           blue

argb >> 8 ==> 00000000 00000000 10101010 01010101 
                                red      green
(argb >> 8) & 0xff ==> 00000000 00000000 00000000 01010101 
                                                  green

argb >> 16 ==> 00000000 00000000 00000000 10101010
                                          red
(argb >> 16) & 0xff ==> 00000000 00000000 00000000 10101010
                                                   red

即使认为红色值上的 & 0xff 似乎没有必要,也不能保证调用者可能没有设置一些未使用的高位位,因此您希望安全并关闭所有这些位。

于 2012-08-14T04:07:19.853 回答
2
int rgb[] = new int[] {     
(argb >> 16) & 0xff, //red     
(argb >>  8) & 0xff, //green     
(argb      ) & 0xff  //blue 
};

>>: 算术右移。也称为有符号移位。

&: 按位与

0x....: 十六进制数。

但它在做什么?

(argb >> 16) & 0xff将 16 位的值右移argb,然后执行按位与运算以仅捕获 8 位。这实际上是从位 16-23 获取字节

于 2012-08-14T03:05:51.440 回答