Показать сообщение отдельно
Старый 12.05.2008, 14:50
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
Сообщение от Волгоградец Посмотреть сообщение
iNils, что такое ">>" и почему 16???
Я бы перевел так - rgb намного больше шестнадцати ...
Сдвигаем число вправо на 16 бит. Почему 16? Потому, что красный цвет, это 3-ий байт справа, поэтому нам нужно сдвинуть правых два байта, а это как раз 16 бит.
Это цельная картина:
Код:
argb = 0x04030201;
trace (argb >> 24 & 0xFF); // альфа
trace (argb >> 16 & 0xFF); // красный
trace (argb >> 8 & 0xFF); // зеленый
trace (argb >> 0 & 0xFF); // синий
А & 0xFF отбрасывает все, что находится слева от крайнего байта, полученного после сдвига, так как argb >> 16 даст нам 0x0403 и 0x04 лишнее.
Для синего цвета сдвига делать не надо, поэтому вместо argb >> 0 & 0xFF можно просто написать argb & 0xFF.

Еще одно полезное свойство побитового сдвига. Операции
Код:
a = Math.floor (b);
a = Math.floor (b / 2);
a = Math.floor (b / 4);
абсолютно аналогичны этим
Код:
a = b >> 0
a = b >> 1
a = b >> 2
Только вот сдвиг работает в 1,5 раза быстрее.
__________________
(и)Нильс.ru | Плагины для FlashDevelop