按位运算的说明

时间:2015-03-24 02:37:39

标签: java android colors

我有一个非常简单的问题:我想知道这个java操作的含义是什么。我是java的初学者,无法理解它的作用。我知道它是一个存储颜色的打包int

(alpha << 24) | (red << 16) | (green << 8) | blue

另一个问题:我想从0xFFFFFFFF值转换为RGB类型颜色,如何将这个打包的int分成RGB通道?

1 个答案:

答案 0 :(得分:2)

关于第一个问题:

Expressison正在将4个8位数量加载到32位int中。虽然通常这种布尔操作是使用无符号整数来完成的,以避免我在这里遇到的并发症。

您正在显示的行是将alpha分量的值(例如,其8位)向左移位24位,以创建一个alpha占用4的高位字节的结果-byte(32位)整数。

然后它将红色分量16位向左移位(增加其数值二进制数量级),并将该移位操作的结果逻辑或运算为存储在α中的32位整数,合并值,占据第3个字节。此时的结果将是前两个字节将具有alpha和red值,依此类推。

关于第二个问题:

您可以反转该过程并使用布尔运算符:

unsigned int v = 0xff557788;
int blue = v & 0xff;
int green = v >> 8 & 0xff;
int red = v >> 16 & 0xff;
int alpha = v >> 24 & 0xff;

在这个例子中,我们将字段以8的倍数右移以将不同的字节移入最低字节,然后屏蔽(例如,逻辑与“0xff”)以获得排除高位3字节的值