按位运算符 - 需要伪代码转换

时间:2010-05-01 19:06:39

标签: bit-manipulation bitwise-operators

有人可以将此语句翻译成伪代码(或只是简单的英语)吗?

var c:uint = 0xFF << 24 | r << 16 | g << 8 | b;

3 个答案:

答案 0 :(得分:6)

这是在一个四字节字中设置不同的字节。 &LT;&LT;向左移动指定的位数,因此<< 24移位三个字节,<< 8移位一个字节,等等。因此,组合在一起的组件将是

0xFF000000         0xFF << 24
0x00rr0000         r << 16
0x0000gg00         g << 8
0x000000bb         b

给出类似

的最终答案
0xFFrrggbb

鉴于变量名称,这可能是32位颜色值,每个字节分别为红色,绿色和蓝色。第四个组件可以是透明度,也可以是z值(深度),或者只是备用位,以防其他地方需要它们。 ; - )

答案 1 :(得分:2)

它似乎是在c变量中存储的8位通道值中创建复合32位颜色值r, g, b,以及alpha通道值0xFF(所有的),即完全不透明。

基本上,正在发生的事情是每个单独的值0xFF, r, g, b被移动适当数量的位置(24,16,8和0)然后进行OR编辑以组合它们并存储到单个无符号中整数变量。

答案 2 :(得分:1)

它需要四个字节值并组合成一个32位无符号整数。

移位运算符<<用于将值移动到特定的位位置。

0xFF&lt;&lt; 24创建值0xFF000000。

r&lt;&lt; 16将r值放在接下来的8位中:0x00rr0000。

等等。或者将它们组合在一起会产生值0xFFrrggbb。

此操作的原因很可能是将alpha,red,green和blue组件组合成32位颜色值。