有人可以将此语句翻译成伪代码(或只是简单的英语)吗?
var c:uint = 0xFF << 24 | r << 16 | g << 8 | b;
有人可以将此语句翻译成伪代码(或只是简单的英语)吗?
var c:uint = 0xFF << 24 | r << 16 | g << 8 | b;
这是在一个四字节字中设置不同的字节。<< 向左移动指定的位数,因此<< 24
移动三个字节,<< 8
一个字节等。所以被或在一起的组件将是
0xFF000000 0xFF << 24
0x00rr0000 r << 16
0x0000gg00 g << 8
0x000000bb b
给出一个看起来像的最终答案
0xFFrrggbb
给定变量名称,这可能是一个 32 位颜色值,每个字节用于红色、绿色和蓝色。第四个组件可以是透明度或 z 值(深度),或者只是备用位,以防其他地方需要它们。;-)
它似乎是c
从存储在变量中的 8 位通道值r, g, b
以及(全为 1)的 alpha 通道值0xFF
(即完全不透明)中创建复合 32 位颜色值。
本质上,正在发生的事情是每个单独的值0xFF, r, g, b
都被移动了适当数量的位置(24、16、8 和 0),然后 OR-ed 一起将它们组合并存储到单个无符号整数变量中。
它需要四个字节值并组合成一个 32 位无符号整数。
移位运算符<<
用于将值移动到特定的位位置。
0xFF << 24 创建值 0xFF000000。
r << 16 将 r 值放在接下来的八位中:0x00rr0000。
等等。将它们组合在一起创建值 0xFFrrggbb。
这个操作的原因很可能是把 alpha、red、green 和 blue 分量放在一起,变成一个 32 位的颜色值。