Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2013, 15:56   #1
D92
Пользователь
 
Регистрация: 07.05.2012
Сообщений: 29
По умолчанию Цвет

Подскажите пожалуйста, что значат эти строчки?

Код:
red = (c1 >> 16) & 0x000000FF;
n= (0xFF000000 | n << 16 | n << 8 | n);
D92 вне форума Ответить с цитированием
Старый 11.11.2013, 08:37   #2
Nomorewine
Новичок
Джуниор
 
Регистрация: 11.11.2013
Сообщений: 5
По умолчанию

>> оператор правого двоичного смещения; << оператор левого двоичного смещения; & двоичный оператор "и"; | двоичный оператор "или"; Примеры а = 0110; б = 0101; а>>2 = 0001; б<<1 = 1010; Пример с десятичными для ясности:
Код:
12345>>3 = 00012;
12345>>1 = 01234; 123456<<3=456000
и т.п. "Пустоту" заполняем нулями.
Пример & и | : а&б где
Код:
 а = 0110 и б = 0101 => а&б = 0100; (0&0 = 0; 1&0 = 0; 0&1=0; 1&1 = 1;)
Теперь смотрим
Код:
а|б = 0111 (0|0 = 0, все остальные случаи будет равны 1;)
В вашем конкретном примере
Код:
(c1>>16) & 0х000000ФФ, если c1 = 00000000 00000000 11111111 11111111
тогда
Код:
c1>>16->  ( 00000000 00000000 00000000 00000000) & 0х000000ФФ(можно заменить на двоичное: 00000000 00000000 00000000 11111111)
отсюда следует
Код:
(c1>>16)&0х000000ФФ =  00000000 00000000 00000000 00000000;
Tutorials Link

Последний раз редактировалось Nomorewine; 11.11.2013 в 08:53.
Nomorewine вне форума Ответить с цитированием
Старый 12.11.2013, 01:11   #3
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Объясню чуть более понятнее - у вас RGB который обычно хранится в переменных типа int, которые имеют 32 разряда (бита). старшие биты при этом не играют роли, там может быть что угодно.
т.е. :
01010101 11101101 10110111 01110011

чтобы вырезать 11101101 нам надо выкинуть 01010101 и 10110111 и 01110011.

Для этого надо пойти в этапа:
1.сместить все разряды в право на 16. Для этого в этом случае пойдет как >> так и >>> операторы (различия нагуглите сами):
01010101 11101101 10110111 01110011 >> 16
дадут:
00000000 00000000 01010101 11101101

2. теперь надо выкинуть левую часть. для этого используем оператор &:
00000000 00000000 01010101 11101101 & 0xFF
дадут:
00000000 00000000 00000000 11101101

Для других цветов аналогично:
1. 10110111
red = (c1 >> 8) & 0xFF;
2. 01110011
red = (c1 >> 0) & 0xFF;
или просто
red = c1 & 0xFF;


Касаемо:
n= (0xFF000000 | n << 16 | n << 8 | n);
тут делается что-то непонятное, смахивает на индусячий высер.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.

Последний раз редактировалось alexinspir; 12.11.2013 в 19:14.
alexinspir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
цвет в консоле Артём Волжанкин Помощь студентам 3 26.07.2012 10:07
C#. Цвет Novi4ok_11 Помощь студентам 2 24.02.2011 19:15
Ищем цвет GvR Общие вопросы Delphi 12 24.06.2010 23:48
Каким образом можно изменять цвет фона и цвет шрифта в Label? jungle Win Api 17 21.09.2009 00:38
Как с помощью JavaScript изменить цвет фона ячеек в таблице,так что бы можно было выбрать цвет из списка Gotessa JavaScript, Ajax 1 09.05.2009 16:05