Определение максимального значения битового поля

Есть такая структура

struct test {
  uint8_t a: 4;
  uint8_t b: 3;
}

Мне нужно определить какое максимальное число я могу записать в поле. Т.е. нужно что-то типа этого

#define MAX_A ((1 << size_of_bits(test::a)) - 1)
#define MAX_B ((1 << size_of_bits(test::b)) - 1)

Все, что придумал, это сделать так

#define LEN_A 4
#define LEN_B 3

struct test {
  uint8_t a: LEN_A;
  uint8_t b: LEN_B;
}

#define MAX_A ((1 << LEN_A) - 1)
#define MAX_B ((1 << LEN_B) - 1)

Есть еще варианты без определения первых двух дефайнов?


Ответы (1 шт):

Автор решения: Harry

А такой вариант?

test t;
t.a = 1;
int s = 0;
for(;t.a; t.a<<=1) s++;
cout << (1<<s)-1 << endl;

Везде unsigned, так что вроде бы все корректно...

"По-моему, так" (с) Пух

→ Ссылка