Определение максимального значения битового поля
Есть такая структура
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, так что вроде бы все корректно...
"По-моему, так" (с) Пух