这个位掩码(0xffffff& color)究竟是如何工作的?

时间:2016-10-07 20:05:20

标签: java bitmask bitwise-and

最后我最后问这里!

我们已接受将int颜色从此网站的某处转换为HEX String的答案。

答案中有这一行,我有点迷失自己。

String.format("#%06X", (0xFFFFFF & anyColor));

我迷失在上面代码中这部分“位屏蔽”的地方。

这是我到目前为止所学到的:

int颜色为32位int,其中包含ARGB信息。

那么在上面的“位屏蔽”过程中,Alpha通道如何被屏蔽掉RGB部分?

到目前为止,我自己尝试过的是:

让我们说上面的anyColor有这个ARGB值与argb(250,25,50,75)。

对于RED频道,以及上面的代码开始; 位屏蔽首先是这样做的吗?

0000 0000 0000 0000 0000 0000 0001 1001

使用0x0000ff

进行位屏蔽
0000 0000 0000 0000 0000 0000 1111   1111

或者,RED通道首先从其原始的int颜色值向左移动,然后像这样应用位掩码吗?

RED << 16

0000 0000 0001 1001 0000 0000 0000 0000

然后掩盖了比特?

             F    F
0000 0000 1111 1111 0000 0000 0000 0000

OR,位掩码用0xFFFFFF一次完成所有RGB通道?

0000 0000 1111 1111 1111 1111 1111 1111

我想知道的是在那里做了什么位掩码?任何伟大的解释将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

  

OR,位掩码用0xFFFFFF一次完成所有RGB通道?

AAAA AAAA RRRR RRRR GGGG GGGG BBBB BBBB

那是对的。

ARGB颜色以二进制形式编码,格式如下:

0xffffff

其中每个字母代表相应组件的一位。

有问题的掩码是0000 0000 1111 1111 1111 1111 1111 1111 ,它是8位零,后跟24位的:

0000 0000 RRRR RRRR GGGG GGGG BBBB BBBB

通过执行掩码和ARGB颜色的按位 AND,可以创建RGB表示:

;with cte_1
 AS
( SELECT DISTINCT RoomId
  FROM YourTable
  WHERE Occupancy='Occupied' AND Status='Predervation')
  SELECT RoomId,1 Status
  FROM cte_1
  UNON
  SELECT DISTINCT RoomId,0 Status
   FROM YourTable t
   WHERE NOT EXISTS(SELECT 1 FROM cte_1 c
               WHERE t.RoomId=c.RoomId)