代码如下:
int rgb[] = new int[] {
(argb >> 16) & 0xff, //red
(argb >> 8) & 0xff, //green
(argb ) & 0xff //blue
};
Run Code Online (Sandbox Code Playgroud)
我看到一个代码,它从一个 INT 值中获取 RGB 值,操作如上,但我以前从未见过这样的操作,我想找到更多关于它们是什么以及它们能做什么的信息,符号 >> 和 &和 0xff。
那么,你们都用 Java 解决了什么问题?
位运算的进一步解释。让我们假设 int 位如下所示:
00000000 10101010 01010101 11011011
unused red green blue
Run Code Online (Sandbox Code Playgroud)
要获得蓝色的 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
Run Code Online (Sandbox Code Playgroud)
即使认为红色值上的 & 0xff 似乎是不必要的,也不能保证调用者可能没有设置一些高阶未使用的位,因此您希望安全并关闭所有这些位。