С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.10.2019
Сообщений: 6
1

Битовые поля

01.10.2020, 11:42. Показов 343. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. У меня есть битовое поле:
C++
1
2
3
4
5
struct {
unsigned char a : 5;
unsigned char b : 3;
unsigned char c : 2;
} bitMap;
Вопросы следующие:
1) Как можно получить число битов, которое занято под определённым именем? К примеру, если в качестве аргумента будет 'bitMap.a', то должно выдать 5.
2) Как можно получить ссылку на байт, в котором находится бит? К примеру, если аргументом будет 'bitMap.a' или 'bitMap.b', то выдаст один и тот же результат, ибо они оба находятся в одном и том же байте?
3) Как можно получить оффсет от начала байта в битах? К примеру, если аргументом будет 'bitMap.b', то должно выдать 5, а если 'bitMap.c', то 0?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2020, 11:42
Ответы с готовыми решениями:

Битовые операции, битовые поля.
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в виде битовых операций....

Битовые поля. Поля без типа и имени
Вчера сделал очень интересную и болезненную ошибку (с точки зрения времени, так как искал я ее...

Битовые поля
Классы для хранения байта (в виде битовых полей)1. Создать такой метод, чтобы ноль перемещался от...

битовые поля!!
добрый вечер! имеется класс представления битовых полей: #ifndef HTBITFIELDS #define...

3
2568 / 1280 / 468
Регистрация: 08.11.2016
Сообщений: 3,532
01.10.2020, 14:12 2
1. Например так
C++
1
2
3
4
5
6
7
8
BitMap.a = 1;
int sz = 0;
while (bitMap.a)
{
    ++sz;
    bitMap.a <<= 1;
}
std::cout << sz;
2. не совсем понятно, ссылки на битовые поля получить нельзя, можно сделать что-то такое
C++
1
2
3
unsigned char *bitMapByte = (unsigned char *)&bitMap;
for (int i = 0; i < sizeof(bitMap); ++i)
    std::cout << bitMapByte[i] << std::endl;
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
01.10.2020, 15:18 3
Цитата Сообщение от B1ack_DeK1ng Посмотреть сообщение
Вопросы следующие:
Ответ один - никак.
Because bit fields do not necessarily begin at the beginning of a byte, address of a bit field cannot be taken. Pointers and non-const references to bit fields are not possible. When initializing a const reference from a bit field, a temporary is created (its type is the type of the bit field), copy initialized with the value of the bit field, and the reference is bound to that temporary.

The type of a bit field can only be integral or enumeration type.

A bit field cannot be a static data member.

There are no bit field prvalues: lvalue-to-rvalue conversion always produces an object of the underlying type of the bit field.
https://en.cppreference.com/w/... /bit_field
0
Эксперт С++
3701 / 2835 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 22
01.10.2020, 15:49 4
что-то можно получить через шаблон std::bitset
https://docs.microsoft.com/ru-... ew=vs-2019
0
01.10.2020, 15:49
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.10.2020, 15:49
Помогаю со студенческими работами здесь

Битовые поля
Народ, напишите программу для включения 3-го разряда однобайтового числа и переключения 7-го. Никак...

Битовые поля
Подскажмте пожалуйста новичку, что такое битовые поля.Уже перечитываю раз 11ый, а никак понять не...

Битовые поля
Программа,представляет с собой структуру ломбарда т.е:. База хранимых товаров и недвижимости:...

Битовые поля
Доброго времени суток. Читаю книгу &quot;Освой самостоятельно С++ за 21 день&quot;, наткнулся на битовые...

Битовые поля
Здравствуйте. Возникла необходимость работы с битовыми полями. Однако не могу понять, почему в...

Битовые поля
Здравствуйте, расскажите мне пожалуйста как происходят операции с битами. Мне необходимо получить 1...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru