当谈到按位逻辑时,我有点天真,我有一个简单的问题...基本上如果我有这个(是ActionScript但可以应用于多种语言):
var color:uint = myObject.color;
var red:uint = color >>> 16;
var green:uint = color >>> 8 & 0xFF;
var blue:uint = color & 0xFF;
我想知道究竟是什么`& 0xFF'正在绿色和蓝色。我理解AND操作的作用,但为什么需要(或者好主意)呢?
此代码的来源位于:http://alexgblog.com/?p=680
欣赏提示。 亚历
答案 0 :(得分:13)
在RGB中,红色为8位,绿色为8位,蓝色为8位。您将3个字节存储在一个int中,以这种方式有4个字节:
要将它们提取为单独的值,您需要右移正确的位数,以便将与要提取的颜色对应的字节放在int的最低有效字节中,然后将其余的int放入在0中,以便只允许该字节值。最后一部分是通过使用掩码0xFF的AND操作完成的。 AND保留int的唯一字节,其中应用了相同的值,其余字节保留为0。
这就是:
var color:uint = myObject.color;
你有这样的颜色变量:0x00RRGGBB
var red:uint = color >>> 16;
右移16位颜色导致:0x000000RR,导致红色值。
但是:
var green:uint = color >>> 8 & 0xFF;
右移8位后,它会留下这个结果0x0000RRGG,但是这里我们只需要留下GG位,所以我们用掩码0xFF应用AND运算,或者更清楚0x000000FF,因为你知道并且离开旧的掩码为1且位为零的位值掩码为0,因此执行0x0000RRGG & 0x000000FF = 0x000000GG
的结果为绿色值。同样适用于提取蓝色值。