Битовые операторы - нужен перевод псевдокода - PullRequest
1 голос
/ 01 мая 2010

Может ли кто-нибудь перевести это утверждение в псевдокод (или просто английский)?

var c:uint = 0xFF << 24 | r << 16 | g << 8 | b;

Ответы [ 3 ]

6 голосов
/ 01 мая 2010

Это настройка различных байтов в четырехбайтовом слове. << сдвигается влево на указанное количество битов, поэтому <code><< 24 сдвигается на три байта, << 8 на один байт и т. д. Таким образом, компоненты, которые объединены в одну группу, будут

0xFF000000         0xFF << 24
0x00rr0000         r << 16
0x0000gg00         g << 8
0x000000bb         b

Чтобы дать окончательный ответ, похожий на

0xFFrrggbb

Учитывая имена переменных, это, по-видимому, 32-битное значение цвета с байтом для красного, зеленого и синего. Четвертый компонент может быть прозрачностью, или z-значением (глубиной), или просто резервными битами на случай, если они понадобятся где-то еще. ; -)

2 голосов
/ 01 мая 2010

Создается составное 32-битное значение цвета c из 8-битных значений канала, сохраненных в переменных r, g, b, вместе со значением альфа-канала 0xFF (все), т.е. полностью непрозрачный.

По сути, происходит то, что каждое отдельное значение 0xFF, r, g, b смещается на соответствующее количество мест (24, 16, 8 и 0) и затем объединяется в ИЛИ, чтобы объединить их и сохранить в одной целочисленной переменной без знака ,

1 голос
/ 01 мая 2010

Он принимает четыре байтовых значения и складывается в 32-разрядное целое число без знака.

Оператор сдвига << используется для перемещения значений в определенную битовую позицию.

0xFF << 24 создает значение 0xFF000000. </p>

r << 16 помещает значение r в следующие восемь битов: 0x00rr0000. </p>

И так далее. Объединение их вместе создает значение 0xFFrrggbb.

Причиной этих операций, скорее всего, является объединение альфа, красного, зеленого и синего компонентов в 32-битное значение цвета.

...