![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| null56 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Я не совсем представляю, что из себя предсталяют битовые поля после компиляции и на сколько быстро идет к ним обращение по сравнению с отедельно взятой переменной, но я их использую, как флаги
Собственно хотел спросить, возможен ли такой вариант есть функция, которая принимает битовое поле и имеет возможность изменить его внутри тела? надеюсь вопрос понятен... приведу пример кода, который может сделает вопрос более конкретным
Если не сложно, дополните вопрос с пояснением.... потому что для меня битовые поля - это максимально упакованные значения, как с ними работает компилятор, я уже говорил, не представляю... Заранее благодарен за помощь |
||||
|
|||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
я думал, должен быть тип unsigned int
Для манипулирования битовыми полями с несколькими битами обычно используют встроенные побитовые операторы
Классы, в которых определены битовые поля обычно снабжены и встраиваемыми методами, облегчающие установку и проверку значений битовых полей. Например класс File мог содержать такие функции:
Это сообщение отредактировал(а) zim22 - 6.5.2009, 11:58 |
||||||
|
|||||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Получить ссылку на битовое нельзя. Можно разве что так:
|
|||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Медленнее
|
||||||||
|
|||||||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Вместо битовых полей можно использовать маски:
Код сгенерированный компилятором будет примерно одинаковым, что и применении битовых полей. |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Значит попробую сделать выводы.
В С++ битовое поле призвано повысить уровень абстракции, чтобы пользователю самому не приходилось реализовывать битовые операции, но компилятор в исходном машинном коде все равно будет делать тоже самое, что и делал бы пользователь, а именно те же сбросы или выставлаения битов Сама структура с битовыми полями является байтом или более широким словом и по сути к ней можно обращаться и передавать как одну переменную и работать с ней используя битовые операции для изменения значений отдельных битов, это будет аналогично использованию возможностей компилятора по обращению к отдельным битовым полям... Если я все верно понял, то отлично... Все спасибо за подробные ответы |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
уровень абстракции повысит класс из #include <bitset> Битовые поля обычно используют в случае, когда программа должна передать бинарные данные другой программе или аппаратному устройству. Расположение в памяти битовых полей является машинно-зависимым. Это сообщение отредактировал(а) zim22 - 6.5.2009, 12:32 |
|||
|
||||
| null56 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
вот это верно подмечено.... по моему, проще потратить 9 байт на флаги, чем связываться с битовыми полями в моем случае... было бы их штук 30, тогда другой вопрос... хотя даже не знаю.... Вопрос такой, если мы объявляем структуру битового поля, то уже не имеем возможности обращаться к полям через собсвтенные битовые операции, только средствами компилятора? подробнее на коде... так делать никак нельзя?
|
||||
|
|||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
и так можно:
Это сообщение отредактировал(а) zim22 - 6.5.2009, 12:55 |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |