是否使用& , 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];
}
答案 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
是蓝色的十六进制表示。在integerCode
和0x000000FF
之间执行按位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是一个很好的资源。