什么是使用"&" ,0x000000FF,>> 8?

时间:2018-05-30 07:33:55

标签: ios objective-c hex uicolor

是否使用& 0x000000FF >> 8 在以下方法中。任何人都可以解释一下吗?

提前致谢

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

    return [UIColor colorWithRed:r green:g blue:b alpha:1.0f];
}

1 个答案:

答案 0 :(得分:2)

注意:您的错误有点儿。这是编辑版本:

- (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];
}

<强>解释

<强>&安培;是按位AND运算符:它需要两个数字并对每个位执行AND运算。如果两个位都为1,则结果位为1,否则为0。

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

0x000000FF是蓝色的十六进制表示。在integerCode0x000000FF之间执行按位AND过滤来自integerCode的蓝色位并将其分配给浮点b。

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

注意FF在三个十六进制值之间移位。

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

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

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

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