Actionscript 对RGB值使用逻辑位移位

Actionscript 对RGB值使用逻辑位移位,actionscript,colors,bit-manipulation,bit-shift,Actionscript,Colors,Bit Manipulation,Bit Shift,我有点天真,当谈到位逻辑,我有什么可能是一个简单的问题。。。基本上,如果我有这个(是ActionScript,但可以应用于多种语言): 我想知道“&0xFF”到底对绿色和蓝色做了什么。我理解AND操作的作用,但为什么这里需要它(或一个好主意) 此代码的源代码如下: 谢谢你的提示。 Alex在RGB中,红色有8位,绿色有8位,蓝色有8位。将3个字节存储在int中,int有4个字节,如下所示: 蓝色的0-7位(最低有效) 绿色的8-15位(最低有效) 红色的16-23位(最低有效) 要将它们提取

我有点天真,当谈到位逻辑,我有什么可能是一个简单的问题。。。基本上,如果我有这个(是ActionScript,但可以应用于多种语言):

我想知道“&0xFF”到底对绿色和蓝色做了什么。我理解AND操作的作用,但为什么这里需要它(或一个好主意)

此代码的源代码如下:

谢谢你的提示。
Alex

在RGB中,红色有8位,绿色有8位,蓝色有8位。将3个字节存储在int中,int有4个字节,如下所示:

  • 蓝色的0-7位(最低有效)
  • 绿色的8-15位(最低有效)
  • 红色的16-23位(最低有效)
要将它们提取为单独的值,需要将正确的位数右移,以便将与要提取的颜色对应的字节放在int的最低有效字节中,然后将int的其余部分放在0中,以便仅允许该字节值。最后一部分是使用带掩码0xFF的AND操作完成的。AND将应用相同值的int的唯一字节保留为0,其余字节保留为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的位置,会留下旧位值,掩码为0,因此,执行
0x0000RRGG&0x000000FF=0x000000GG
的结果是绿色的值。同样的方法也适用于提取蓝色值。

我认为如果你右移位,所有的前导数都是0,如果你使用的是无符号整数,如果它是一个2s的整数,所有的前导数都是1。是的,但是当你想提取蓝色字节时,左边有绿色和红色的字节。你必须消除它们,使用AND将它们归零。好吧,但是如果你对字节序列应用&0xFF,它为什么会清除红色和绿色而不是蓝色?如果红色占用0xFF空间,蓝色占用0xFF空间,那么在不“擦除”蓝色部分的情况下,该过程实际上是如何发生的?今天我又回到了这个老问题。每当我重读你的答案时,我都会更进一步,完全明白发生了什么。也就是说,所有这些都是关于将位掩码0xFF表示为0x000000FF并应用掩码,只保留两个最低有效位。很好。我以为rgbValue>>24返回alpha值。我怎么知道移动24将返回阿尔法或红色?
var green:uint = color >>> 8 & 0xFF;