Какая польза от "&", 0x000000FF, >> 8? - PullRequest
0 голосов
/ 30 мая 2018

Какой смысл использовать & , 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 голосов
/ 30 мая 2018

Примечание: Есть небольшая ошибка в вашем.Вот отредактированная версия:

- (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.

>> является оператором побитового сдвига вправо: Требуется два числа.Во-первых, это число, которое будет смещено.Второе - это места для смещения.

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.

Если вас больше интересуют подробности побитовых операторов, здесь - хороший ресурс.

...