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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
anwender95
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 10
#1

Нумерация битов в битовых полях - C++

31.03.2014, 16:19. Просмотров 1068. Ответов 20
Метки нет (Все метки)

Здравствуйте!
У меня есть битовое поле и юнион:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct bitfield{
    bool b0:1;
    bool b1:1;
    bool b2:1;
    bool b3:1;
    bool b4:1;
    bool b5:1;
    bool b6:1;
    bool b7:1;
    bool b8:1;
    bool b9:1;
    bool b10:1;
    bool b11:1;
    bool b12:1;
    bool b13:1;
    bool b14:1;
    bool b15:1;
};
union byte{
    bitfield p; //part
    short int a; //all
};
Меня интересует, можно ли обращаться к номерам битов через переменную?
Типа
C++
1
2
3
for(int i=0;i<15;i++){
word2.p.bi;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 16:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нумерация битов в битовых полях (C++):

Перевод таблицы битов и времени в последовательность битов arduino - C++
доброго времени суток в приведенной ниже таблице левый столбец - биты, правый - их длительность. известно, что единичный сигнал длится от...

Операции с побитовыми операторами (число 8 битов и число 9 битов) - C++
Доброго времени суток всем ! Прошу ответа на несложный вопрос (...по крайней мере мне так кажется...) Есть функция: ...

Массив битовых полей - C++
Добрый день! Из файла читается массив 4-битовых значений т.е. по два значения в каждом байте. Можно ли описать массив так, чтобы...

Таблица битовых переходов - C++
Доброго времени суток! Появилась необходимость замены битовых комбинаций по заранее сгенерированным правилам. Суть проблемы такова: имеется...

Обработка Битовых последовательностей - C++
Здравствуйте, помогите пожалуйста решить задачку. Тема: Обработка битовых последовательностей. Нужно реализовать алгоритм инвертирования...

Типы битовых полей - C++
Какие типы можно определять в битовых полях? Можно ли использовать битовые поля в чем-нибудь, кроме структур? В битовых полях никак...

20
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.03.2014, 16:24 #2
Цитата Сообщение от anwender95 Посмотреть сообщение
можно ли обращаться к номерам битов через переменную?
Нельзя. Если просто нужен доступ к отдельным битам числа, то достаточно использовать соответствующие битовые операции (сдвиг, битовое-и...) вместо введения битовых полей.
0
anwender95
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 10
31.03.2014, 16:29  [ТС] #3
Т.е. нельзя никаким способом выбирать бит по номеру из битового поля?
просто интереснее было бы так, а не через операции побитовые.
0
zss
Модератор
Эксперт С++
6403 / 5969 / 1945
Регистрация: 18.12.2011
Сообщений: 15,370
Завершенные тесты: 1
31.03.2014, 16:59 #4
Скорее всего получится. Но не факт, что b0 окажется младшим, а b15 старшим.
И с вычислительной точки зрения такое обращение к битам займет больше
процессорного времени.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
31.03.2014, 17:00 #5
Цитата Сообщение от zss Посмотреть сообщение
Скорее всего получится, но не факт
Что-то я сейчас на коленке через массив попробовал, и что-то совсем не факт. Но ведь запускал как-то.
1
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.03.2014, 17:03 #6
C++
1
word2.p.bi;
думаю, что тебе скажут, что bi не является членом класса bitfield
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.03.2014, 17:08 #7
Цитата Сообщение от aLarman Посмотреть сообщение
думаю, что тебе скажут, что bi не является членом класса bitfield
Тут ТС хочет чтобы i интерпретировался как индекс (т.к. в примере используется в массиве).
anwender95, можно рассмотреть использование std::bitset
1
anwender95
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 10
31.03.2014, 17:36  [ТС] #8
эх. А отдельно каждую переменную в битфилде пронумеровать и юзать по номерам нельзя?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
31.03.2014, 17:45 #9
Цитата Сообщение от anwender95 Посмотреть сообщение
А отдельно каждую переменную в битфилде пронумеровать и юзать по номерам нельзя?
Нельзя. Либо пишите своё обёртку, либо используйте std::bitset.
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
01.04.2014, 14:53 #10
Цитата Сообщение от Tulosba Посмотреть сообщение
пишите своё обёртку
Что-то у меня никак не получается отделаться малой кровью. Засунуть-то в структуру set/get методы можно, но это не даст гибкости как, к примеру, у оператора квадратных скобок. Тяжко без адресной арифметики.
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.04.2014, 15:10 #11
Цитата Сообщение от SatanaXIII Посмотреть сообщение
к примеру, у оператора квадратных скобок.
Что мешает перегрузить operator[] ?
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
01.04.2014, 15:14 #12
Цитата Сообщение от Tulosba Посмотреть сообщение
Что мешает перегрузить operator[] ?
То, что у бита нет адреса. Не получится перегрузить &operator[].
1
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
01.04.2014, 15:21 #13
Цитата Сообщение от SatanaXIII Посмотреть сообщение
То, что у бита нет адреса. Не получится перегрузить &operator[].
с кучей if возвращать bi в зависимости от вх.значения индекса, но это жесть
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 1
01.04.2014, 15:25 #14
Цитата Сообщение от aLarman Посмотреть сообщение
с кучей if возвращать bi в зависимости от вх.значения индекса, но это жесть
Ну, положим, не кучей ифов, а кейсом. Но вы попробуйте реализовать.
1
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
01.04.2014, 15:47 #15
Цитата Сообщение от SatanaXIII Посмотреть сообщение
а кейсом
согласен
C++
1
2
3
4
5
6
7
8
9
10
bool & operator[](size_t index)
{
switch(index)
{
case 0: return b0;
case 1: return b1;
///
default: return b15;
}
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2014, 15:47
Привет! Вот еще темы с ответами:

Реализация битовых операций в Си++ - C++
По теме: Реализация битовых операций в Си++. Даны два неравных числа: n и m, не превосходящие 31. Вычислите 2^n+2^m.

Упаковка битовых групп - C++
Доброго времени суток. Подскажите пожалуйста где я ошибся? Задание в шапке проги // File !lab4-2.cpp // Упаковка битовых групп // ...

Обработка битовых последовательности (Срочно) - C++
Решите пожалуйста задачу на с++ НЕ че не могу сделать, голову сломал, напишите плиз а то я у же в очередье на отчисления в универе ...

Выполнение битовых логических операций - C++
Вот такой пример: // BitTest — инициируются две переменные и // выводятся результаты выполнения // операторов ~,&amp;,| и ^ #include...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
01.04.2014, 15:47
Ответ Создать тему
Опции темы

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