1

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

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

3 回答 3

6

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

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

给出一个看起来像的最终答案

0xFFrrggbb

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

于 2010-05-01T19:09:50.160 回答
2

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

本质上,正在发生的事情是每个单独的值0xFF, r, g, b都被移动了适当数量的位置(24、16、8 和 0),然后 OR-ed 一起将它们组合并存储到单个无符号整数变量中。

于 2010-05-01T19:09:43.500 回答
1

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

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

0xFF << 24 创建值 0xFF000000。

r << 16 将 r 值放在接下来的八位中:0x00rr0000。

等等。将它们组合在一起创建值 0xFFrrggbb。

这个操作的原因很可能是把 alpha、red、green 和 blue 分量放在一起,变成一个 32 位的颜色值。

于 2010-05-01T19:11:26.627 回答