0xff что это такое
Что делает» & 0xff»?
Я пытаюсь понять код ниже: b дано целое число а image изображение.
Я понимаю,что если значение RGB в данной точке i, j больше, чем b, то установите этот пиксель на белый, а другой-на черный. таким образом, изображение будет преобразовано в черно-белое.
однако я потерян для того, что (&0xff) на самом деле делает, я предполагаю, что это своего рода двоичный сдвиг?
5 ответов
это так называемая маска. Дело в том, что вы получаете значение RGB все в одном целом, с одним байтом для каждого компонента. Что-то вроде 0xAARRGGBB (Альфа, красный, зеленый, синий). Выполняя побитовое-и с 0xFF, вы сохраняете только последнюю часть, которая является синей. Для других каналов вы бы использовали:
получает один из цветовых компонентов (красный или синий, я забыл, какой).
если цветовая маска не выполняется, рассмотрим RGB (0, 127, 0) и порог 63. В getRGB(. ) звонок вернется
что явно больше, чем порог 63. Но целью было игнорировать два других цветовых канала. Битовая маска получает только самые низкие 8 бит, с нулем.
проверка если цвет ярче определенного порога, ‘b’.
если порог превышен, пиксель окрашивается в белый цвет, используя
. в противном случае он окрашен в черный цвет, используя
таким образом, это преобразование в черно-белый на основе простого порога пиксель за пикселем на одном цветовом канале.
Это, вероятно, потому, что есть некоторое преобразование в или из ARGB. Это действительно хороший пост в блоге о том, почему делать битовые операции для цветов.
цвета представления
RGB-значение является целым числом, поэтому оно представлено в памяти 4 байта (или 32 бита).
каждый байт представляет один компонент цвета:
0xFF и 0xffffff символы
0xff представляет шестнадцатеричное значение FF, равное целому числу 255. Его двоичное представление:
аналогично 0xffffff представлено:
соответствует цвету белый (красный, зеленый и синий равны 255).
& оператор
в двоичный оператор и » & » применяется к двум целым числам i1 и i2 (i1 & i2). Он возвращает целое число со всеми его битами, равными 0, за исключением тех, которые равны 1 в i1 и i2. Например, если мы применяем & на моем первом примере и на 0xff, мы получаем:
как следствие, (& 0xff) позволяет сохранять только значения последнего байта (т. е. значение синего компонента цвета).
AVR GCC :: УПРАВЛЕНИЕ ПОРТАМИ МИКРОКОНТРОЛЛЕРА
Любой порт микроконтроллера можно сконфигурировать как вход или как выход. Для того чтобы это сделать, следует записать в соответствующий порту регистр DDRx необходимое значение. Кроме того, как вход или выход можно сконфигурировать отдельно любой вывод (пин) порта. В любом случае, хотите вы сконфигурировать весь порт или отдельный вывод, вам необходимо будет работать с ригистрами DDRx.
Используя AVR GCC, записать в необходимый регистр то или иное значение можно одним из следующих способов.
Для всего порта сразу.
Все выводы порта D будут сконфигурированы как выходы.
В AVR GCC для представления двоичных чисел используется префикс 0b. Таким образом, число 11111111 должно представляться в программе как 0b11111111. Мы можем записать предыдущую команду в более читабельном виде.
Хотя такая запись и выглядит более наглядной, при конфигурировании портов принято использовать шестнадцатиричное представление чисел.
Для того чтобы сконфигурировать все выводы порта D как входы, следует записать во все биты регистра DDRD логические нули.
В регистр DDRD можно записать и другие числа. Например:
Каждый бит регистров DDRx может быть установлен отдельно. Например, чтобы сконфигурировать отдельно вывод PD2 как выход, нам необходимо в соответствующий бит регистра DDRD записать 1. Для этого применяют следующую конструкцию.
Таким образом, к битам, хранящимся в регистре DDRD, прибавляется двоичное 100, представленное в 8-битном регистре микроконтроллера как 00000100, и результат записывается обратно в регистр DDRD.
Чтобы сконфигурировать отдельно вывод PD2 как вход, нам необходимо в соответствующий бит регистра DDRD записать 0. Для этого применяют следующую конструкцию.
В данном случае результат сдвига единицы на две позиции влево инвертируется с помощью операции побитного инвертирования, обозначаемой значком «
Таким образом, при побитном инвертировании 00000100 мы получаем 11111011. (Подробнее о работе с числами в микроконтроллере см. во врезке ниже.)

То есть сдвинутая нами влево на две позиции единичка превращается при инвертировании в ноль и умножается на соответствующий бит, хранящийся в регистре DDRD. При умножении на ноль мы получаем ноль. Таким образом, бит PD2 становится равным нулю.
![]() | Кроме логических операций И, ИЛИ, НЕ существует также операция «исключающее ИЛИ» (английское название XOR). Она обозначается значком ^. При исключающем ИЛИ значение бита, к которому «прибавляется» единичка, изменяется на противоположное. Например, 110011 ^ 11010 = 101001. |


