怎么做>> &安培;和0xff意味着

时间:2012-08-14 02:59:41

标签: java

  

可能重复:
  Good tutorials on Bitwise operations in Java
  Are the &, |, ^ bitwise operators or logical operators?

代码如下:

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

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

那么,你们用Java解决它们的问题是什么?

2 个答案:

答案 0 :(得分:4)

比特算术的进一步说明。我们假设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似乎是不必要的,不能保证调用者可能没有设置一些高位未使用位,因此您希望安全并关闭所有这些位。

答案 1 :(得分:2)

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

>>:算术右移。也称为签名 shift。

&:按位AND

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

但是它在做什么?

(argb >> 16) & 0xff右移argb 16位的值,然后执行按位AND运算以仅捕获8位。这基本上是从16-23位获得字节