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