Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
#1

Сложение флагов - Android

27.11.2015, 10:14. Просмотров 293. Ответов 11
Метки нет (Все метки)

Пример из урока startandroid:
Java
1
2
3
 pMeasure.getMatrix(distance, matrix,
          PathMeasure.POSITION_MATRIX_FLAG
              + PathMeasure.TANGENT_MATRIX_FLAG);
флаги. Их два POSITION_MATRIX_FLAG – в матрицу попадут данные только по позиции точки, TANGENT_MATRIX_FLAG – в матрицу попадут данные только по повороту в точке. Мы используем сразу оба флага.
Скажите пожалуйста, почему мы используем оба флага сложением? Обычно же мы флаги объединяем вот так, с помощью вертикальной черты: |.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 729
27.11.2015, 10:55     Сложение флагов #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
наверное потому что
PathMeasure.POSITION_MATRIX_FLAG
+ PathMeasure.TANGENT_MATRIX_FLAG
в результате дают int
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
27.11.2015, 11:14     Сложение флагов #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
danek130995, тут скорее всего реализация немного другая.
Java
1
2
3
POSITION_MATRIX_FLAG = 1;
TANGENT_MATRIX_FLAG = 2;
BOTH_MATRIX_FLAG = POSITION_MATRIX_FLAG + TANGENT_MATRIX_FLAG;
Что-то подобное наверно.
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 729
27.11.2015, 11:44     Сложение флагов #4
Цитата Сообщение от danek130995 Посмотреть сообщение
почему мы используем оба флага сложением
не флаги это
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
27.11.2015, 17:53  [ТС]     Сложение флагов #5
Valakin, Spelcrawler, я так и подумал, что это не флаги. Видимо, просто так назвали:FLAG. Спасибо большое всем

Добавлено через 7 минут
Valakin, Spelcrawler,
Java
1
2
 public static final int POSITION_MATRIX_FLAG = 0x01; 
    public static final int TANGENT_MATRIX_FLAG  = 0x02;
Я щас посмотрел - тут 16 ричная запись. Как они вообще тогда в int могут хранится? А как же буквы A B C D E F?
Значит, побитовое или можно применять к флагам в 16 ричном коде и хранить их в int?
Вот, например:
Java
1
2
int code = 0;
code|=0x01;
А если было бы 0x0F?

Добавлено через 3 часа 15 минут
Valakin, Spelcrawler, я что-то запутался. Вопрос прежде всего теперь такой: Как можно в int представлять вот такие 16-ричные значения?
Java
1
  @ColorInt public static final int RED         = 0xFFFF0000;
А что самое интересное- в коде, когда я навожу на Color.RED я вижу public static final int RED=-65536. Тут уже похоже на тип int. Как такие значения генерируются из 0xFFFF0000? Помогите пожалуйста
Паблито
2236 / 1809 / 563
Регистрация: 12.05.2014
Сообщений: 6,448
Завершенные тесты: 1
27.11.2015, 17:59     Сложение флагов #6
Цитата Сообщение от danek130995 Посмотреть сообщение
Тут уже похоже на тип int.
а 0xFFFF0000 это что, не int что ли?
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
27.11.2015, 19:33  [ТС]     Сложение флагов #7
Паблито, а разве int? Тут же буквы FF! Я чего-то не знаю, походу.. В чем тут дело?Почему тогда это значение представляется как -65536?
Паблито
2236 / 1809 / 563
Регистрация: 12.05.2014
Сообщений: 6,448
Завершенные тесты: 1
27.11.2015, 19:57     Сложение флагов #8
в джаве можно писать числа не только в десятичной системе, но и в шестнадцатеричной
запись начинается с 0x а потом идет число...обычное целое число, просто записанное в 16-ричной системе

так удобно указывать цвет, либо в формате argb, либо rgb
в данном варианте 0xFFFF0000 означает FF = 255 альфа канал, то есть прозрачность, вторые FF - красная компонента, 00 и 00 зеленая и синяя компоненты сотвественно

если записать это в двоичной системе, то получится число длиной 32 бита, где левые 16 бит будут единицы (FFFF), а правые 16 бит - нули (11111111111111110000000000000000)

красный цвет в формате rgb можно записать в шестнадцатеричной системе как 0xFF0000

Java
1
2
3
        int b = 0b11111111111111110000000000000000;
        int d = -65536;
        int h = 0xFFFF0000;
это одно и тоже число, просто запись в разных системах исчисления
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
27.11.2015, 21:47  [ТС]     Сложение флагов #9
Паблито, Получается, когда мы добавляем 0x, java сама преобразовывает число в десятичную, чтобы его можно было представить в int, без букв?
а почему с минусом то? -65536? Это в десятичной? Я перевел FFFF0000 в десятичную, но получил 4294901760.
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
29.11.2015, 09:58  [ТС]     Сложение флагов #10
Паблито, а почему с минусом то? -65536? Я перевел FFFF0000 в десятичную, но получил 4294901760.
Паблито
2236 / 1809 / 563
Регистрация: 12.05.2014
Сообщений: 6,448
Завершенные тесты: 1
30.11.2015, 12:26     Сложение флагов #11
Цитата Сообщение от danek130995 Посмотреть сообщение
Получается, когда мы добавляем 0x, java сама преобразовывает число в десятичную, чтобы его можно было представить в int, без букв?
https://docs.oracle.com/javase/tutor...datatypes.html
Цитата Сообщение от danek130995 Посмотреть сообщение
а почему с минусом то? -65536? Это в десятичной? Я перевел FFFF0000 в десятичную, но получил 4294901760.
виндовым калькулятором?
я в IDE проверял
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2015, 21:30     Сложение флагов
Еще ссылки по теме:

использование флагов Assembler
C++ Установка флагов форматирования
Порядок флагов D3DFVF_* DirectX
Эмуляция регистра флагов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
30.11.2015, 21:30  [ТС]     Сложение флагов #12
Паблито, Да, виндовым. А почему он не должен совпадать? И как в IDE проверяли? Там что, по-другому как то?

Добавлено через 7 часов 38 минут
все, разобрался здесь
Yandex
Объявления
30.11.2015, 21:30     Сложение флагов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru