“&”、0x000000FF、>> 8 有什么用?

Dha*_*r S -2 hex objective-c uicolor ios

下面的方法中&0x000000FF>> 8有什么用 ?谁能解释一下吗?

\n\n

提前致谢

\n\n
(UIColor *)UIColorFromIntegerCode:(int)integerCode\xc2\xa0 {    \n    CGFloat r = (integerCode & 0x000000FF) / 255.0f;\n\xc2\xa0 \xc2\xa0 CGFloat g = ((integerCode & 0x0000FF00) >> 8) / 255.0f;\n\xc2\xa0 \xc2\xa0 CGFloat b = ((integerCode & 0x00FF0000) >> 16) / 255.0f;\n\n\xc2\xa0 \xc2\xa0 return [UIColor colorWithRed:r green:g blue:b alpha:1.0f];\n}\n
Run Code Online (Sandbox Code Playgroud)\n

HAK*_*HAK 6

注意:你的程序中有一个小错误。这是编辑后的版本:

- (UIColor *)UIColorFromIntegerCode:(int)integerCode  {
    CGFloat b = (integerCode & 0x000000FF) / 255.0f;
    CGFloat g = ((integerCode & 0x0000FF00) >> 8) / 255.0f;
    CGFloat r = ((integerCode & 0x00FF0000) >> 16) / 255.0f;

    return [UIColor colorWithRed:r green:g blue:b alpha:1.0f];
}
Run Code Online (Sandbox Code Playgroud)

解释:

& 是按位与运算符:它接受两个数字,对每一位进行与运算。如果两个位都为 1,则结果位为 1,否则为 0。

>> 是按位右移运算符:它需要两个数字。首先是要移动的数字。其次是要转移的地方。

0x000000FF是蓝色的十六进制表示。在 和 之间执行按位integerCode与,0x000000FF过滤掉整数代码中的蓝色位并将其分配给浮点 b。

同样,0x0000FF00绿色的十六进制是0x00FF0000红色的十六进制。

FF请注意三个十六进制值之间的变化。

0x000000 FF
0x0000 FF 00(右移 8 位)
0x00 FF 0000(右移 16 位)

按位右移运算符用于调整位的移位。最后将过滤后的值除以 255,使其介于 0 和 1 之间。(255 是特定颜色可以具有的最大值。)

过滤 r、g 和 b 中的颜色后,将它们提供给 UIColor 方法来创建 UIColor。

如果您对按位运算符的详细信息进一步感兴趣,这里是一个很好的资源。