Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Всем привет! WinAPI очень много свойств реализует с помощью битовых полей. Например: Код: plaintext 1. 2. 3. У меня вопрос, существуют ли какие-нибудь практики именования, позволяющие вместо 32х свойств положить в битовое поле из 32 бит больше свойств? Через комбинации, взаимоисключения и т.д.? Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 13:11 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
32 свойства это если только одна единичка в каком то разряде. А если их несколько то 2^32. Только зачем это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 13:24 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Спасибо, количество комбинация я знаю. Вопрос в том, что если есть такая маска 0x00000011, где 1й нижний бит это isModifiable, а 5й это isResizable, то как отличить их от isLarge в котором используется и 1й и 5й бит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 13:33 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Или вы про что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 13:39 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Я имею ввиду, что проверив MASK на isModifiable и isLarge я получу для обоих случаев true, так как когда устанавливался isLarge, автоматически установился и isModifiable. Может быть есть практики, позволяющие обойти это ограничение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 13:54 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
MaximuS_GЯ имею ввиду, что проверив MASK на isModifiable и isLarge я получу для обоих случаев true, так как когда устанавливался isLarge, автоматически установился и isModifiable. Может быть есть практики, позволяющие обойти это ограничение? Поэтому флаги кодируются как степени двойки, чтобы избежать подобных коллизий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 13:59 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
ну и как следствие флагов всего может быть 32 для 32 разрядного представления , где код каждого флага определяется следующей формулой: f(i) = 2^i Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:11 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков, спасибо, это я тоже понимаю :). То есть не существует методик/способов (не технических, а логических) увеличить количество флагов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:17 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Если есть взаимоисключаюшие флаги то надо их все кодировать одним и тем же набором бит. Т.е. ни в коем случае не делать так что первый бит означает одно, второй - другое, а оба вместе в определенной комбинации что-то третье. Например есть 3 состояния: 1. Сон 2. Пробуждение 3. Работа Кодируем (в двоичной): 01 - Сон 10 - Пробуждение 11 - Работа Проверять так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. устанавливать как-то так Код: plaintext 1. 2. PS в данном примере 3 это маска (11 в двоичной), синтаксис забыл как двоичные писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:22 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
MaximuS_GАнатолий Широков, спасибо, это я тоже понимаю :). То есть не существует методик/способов (не технических, а логических) увеличить количество флагов? Думаю что не существует. Иначе это была-бы революция в архиваторах. Но ты можешь разбить маску на 2 части. Одну часть использовать как множество флажков. А дугую - перечисление констант. Пример 32 = 16+16. Комбинация из 16 флагов + 65536 взаимоисключающих констант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:25 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
mayton, Ну можно же хранить не битовые поля, а код комбинации, тогда, если комбинаций разных много, а допустимых не более 2^32, то получится, что битовых полей в этом 4 байтовом слове будет больше, чем 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 14:49 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Если дефайнами описывать мой пример, то как-то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. По сути флаг это однобитовая переменная в которую можно записать два состояния (0 и 1). В двухбитовую переменную можно записать 4 и т.д. в общем случае в n-битовую - 2 в степени n значений. Сколько таких битовых секций войдет в 32 бита зависит от количества групп взаимоисключающих флагов в твоей задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 15:00 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
MasterZivmayton, Ну можно же хранить не битовые поля, а код комбинации, тогда, если комбинаций разных много, а допустимых не более 2^32, то получится, что битовых полей в этом 4 байтовом слове будет больше, чем 32. Префиксный код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 15:04 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Dima T , спасибо большое! Ваш пример понятен. mayton Думаю что не существует. Иначе это была-бы революция в архиваторах. Но ты можешь разбить маску на 2 части. Одну часть использовать как множество флажков. А другую - перечисление констант. Пример 32 = 16+16. Комбинация из 16 флагов + 65536 взаимоисключающих констант. Спасибо! А Вы могли бы более подробнее объяснить как это можно использовать для моей задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 15:53 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
maytonMasterZivmayton, Ну можно же хранить не битовые поля, а код комбинации, тогда, если комбинаций разных много, а допустимых не более 2^32, то получится, что битовых полей в этом 4 байтовом слове будет больше, чем 32. Префиксный код? Нет, словарь комбинаций с идентификатором (4 байта) и в качестве значения хранить не комбинацию, а идентификатор в словаре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 17:35 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
MaximuS_G Dima T , спасибо большое! Ваш пример понятен. mayton Думаю что не существует. Иначе это была-бы революция в архиваторах. Но ты можешь разбить маску на 2 части. Одну часть использовать как множество флажков. А другую - перечисление констант. Пример 32 = 16+16. Комбинация из 16 флагов + 65536 взаимоисключающих констант. Спасибо! А Вы могли бы более подробнее объяснить как это можно использовать для моей задачи? А у тебя разве была какая-то задача ? авторУ меня вопрос, существуют ли какие-нибудь практики именования, позволяющие вместо 32х свойств положить в битовое поле из 32 бит больше свойств? Через комбинации, взаимоисключения и т.д.? На вопрос тебе ответили... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 17:37 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
MasterZiv , задачи не было, был вопрос :). Вы правы, мне действительно ответили, но из ответов я только понял схему предложенную Dima_T . Вашу схему и схему mayton я не понял. Подскажите, что правильно хоть искать, что бы понять схемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 20:16 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Еще я бы посоветовал в таком случае использовть union c битовыми полями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 21:02 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
MaximuS_G, ты действительно думаешь что кто-то тут предложит как обойти теорию вероятностей? А она гласит что 32 независимых события могут произойти/не произойти 2^32 способами. Если докажешь что 33 независимых события могут произойти 2^32 способами - получишь нобелевскую премию по математике :) Оттуда же события с тремя и более состояниями. Для максимальной плотности их совместного хранения надо просто оторваться от двоичной логики. Например есть три события (флага) разной емкости: 1. два состояния 2. три состояния 3. пять состояний минимум чтобы хранить все возможные состояния надо емкость = 2 * 3 * 5 = 30, т.е. 5 бит (2^5 = 32) но так хранить неудобно, т.к. извлекать значение конкретного флага ресурсоёмко, т.к. требуется выполнять деление. намного эффективнее будет работать если ввести немного избыточности и выделить отдельные биты под каждый флаг, тогда надо будет 1 + 2 + 3 = 6 бит чтобы хранить отдельно каждый флаг. Тут получаем более высокую производительность, т.к. битовые операции выполняются гораздо быстрее, как минус - получаем избыточность: используем 2^6 = 64 значения для хранения 30-ти. Что важнее: плотность хранения или скорость обработки? решать разработчику исходя из конкретной решаемой задачи. Озвучь свою конкретную задачу, тебе посоветуют способы ее решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 21:11 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
MaximuS_GПодскажите, что правильно хоть искать, что бы понять схемы?У тридцатидвухразрядного слова - 2^32 состояний. Расчёт числа состояний вашего варианта масок/констант - оставляется (вам) в качестве домашнего упражнения. P.S. Если ваших состояний будет больше, чем 2^32 - переходить вам на long long или менять схему кодирования (ваших) состояний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 21:12 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
Всем спасибо! Наверное действительно мне нужна конкретная задача. Появиться, вернусь :) Всем удачи! Dima T , спасибо за подробнее объяснение! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2013, 21:28 |
|
||
|
в 32 бита больше 32 свойств
|
|||
|---|---|---|---|
|
#18+
MaximuS_G MasterZiv , задачи не было, был вопрос :). Вы правы, мне действительно ответили, но из ответов я только понял схему предложенную Dima_T . Вашу схему и схему mayton я не понял. Подскажите, что правильно хоть искать, что бы понять схемы? Да ничего не искать, думать. Берёшь составляешь словарь всех состояний, допустимых. Он должен содержать само состояние (состояние каждого бита, которых может быть > 32), и идентификатор состояния (unsigned int). В поле вместо самих битов будешь хранить идентификатор состояния, а само состояние битов будешь получать из словаря состояний. Кол-во допустимых состояний при этом естественно не должно превышать 2^32. Количество бит в состоянии может быть любым, может быть и много больше 32. Словарь при этом нужно реализовать либо в виде массива с доступом по идентификатору, либо в виде хэш-таблицы по идентификатору состояния. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 12:18 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38208013&tid=2020324]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 281ms |
| total: | 449ms |

| 0 / 0 |
