Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 08:50   #11
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Я бы поступил проще.
Создал бы битовый массив и работал бы циклом for.
Код:
unsigned int r[8] : 3;
Код получается значительно короче.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 01.06.2011, 08:58   #12
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

т.е. вот такая структура будет занимать 4 байта?

Код:
struct BIT
{
        unsigned int t[8]: 3;
	unsigned int s: 8;
}
тогда вобще отлично. Переписываем RES как

Код:
struct RES
{
        unsigned int r[8]: 1;
	unsigned int rs: 8;
}
и в цикле прогоняем 8 раз.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 01.06.2011, 09:34   #13
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Совершенно верно 3*8+8=32 бита, но работать с ней гораздо легче.
Структура RES будет занимать 2 байта т.е. 16 бит.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 01.06.2011, 09:46   #14
NightEagle
Пользователь
 
Регистрация: 13.03.2011
Сообщений: 31
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
Код:
int checkBits(unsigned int bits)
{
  switch (bits) {
    case 3:
    case 5:
    case 6:
    case 7: return 1;
  } 
  return 0;
}
//
r.r1 = checkBits(b.t1);
r.r2 = checkBits(b.t2);
r.r3 = checkBits(b.t3);
r.r4 = checkBits(b.t4);
r.r5 = checkBits(b.t5);
r.r6 = checkBits(b.t6);
r.r7 = checkBits(b.t7);
r.r8 = checkBits(b.t8);
почему return 1 только при case 7 ?
NightEagle вне форума Ответить с цитированием
Старый 01.06.2011, 11:34   #15
NightEagle
Пользователь
 
Регистрация: 13.03.2011
Сообщений: 31
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
Код:
int checkBits(unsigned int bits)
{
  switch (bits) {
    case 3:
    case 5:
    case 6:
    case 7: return 1;
  } 
  return 0;
}
насколько я понял такая запись вернёт единицу на наборах бит, где присутствует две или три единицы.
большое спасибо, очень помогли
NightEagle вне форума Ответить с цитированием
Старый 01.06.2011, 17:53   #16
NightEagle
Пользователь
 
Регистрация: 13.03.2011
Сообщений: 31
По умолчанию

Код:
struct BIT
{
	unsigned int t[8]:3;
	unsigned int s:8;
};

struct REZ
{
	unsigned int r[8]:1;
	unsigned int rs:8;
};
выдаёт ошибку "битовое поле не может иметь косвенное обращение". Что может быть не так?
NightEagle вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
битовые поля и операции NightEagle Общие вопросы C/C++ 5 25.05.2011 19:08
Битовые операции(с++) Lazy maximka Помощь студентам 2 23.12.2010 18:55
Битовые поля Inna_L Общие вопросы C/C++ 1 14.10.2010 12:14
80 битовые переменные Ra88 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 09.10.2010 14:40
битовые поля Arcueid1691 Общие вопросы C/C++ 8 03.12.2009 00:37