Я размышлял (и поэтому искал способ узнать это, , а не лучшее решение), если можно получить массив бит в структуре.
Позвольте мне продемонстрировать на примере. Представьте такой код:
#include <stdio.h>
struct A
{
unsigned int bit0:1;
unsigned int bit1:1;
unsigned int bit2:1;
unsigned int bit3:1;
};
int main()
{
struct A a = {1, 0, 1, 1};
printf("%u\n", a.bit0);
printf("%u\n", a.bit1);
printf("%u\n", a.bit2);
printf("%u\n", a.bit3);
return 0;
}
В этом коде у нас есть 4 отдельных бита, упакованных в структуру. К ним можно получить доступ индивидуально, оставив работу манипуляции с битами в компиляторе. Мне было интересно, возможно ли такое:
#include <stdio.h>
typedef unsigned int bit:1;
struct B
{
bit bits[4];
};
int main()
{
struct B b = {{1, 0, 1, 1}};
for (i = 0; i < 4; ++i)
printf("%u\n", b.bits[i]);
return 0;
}
Я попробовал объявить bits
в struct B
как unsigned int bits[4]:1
или unsigned int bits:1[4]
или подобные вещи безрезультатно. Мое лучшее предположение было typedef unsigned int bit:1;
и использовать bit
как тип, но все же не работает.
Мой вопрос: возможно ли такое? Если да, то как? Если нет, почему бы и нет? 1 бит unsigned int является допустимым типом, поэтому почему бы вам не получить его?
Опять же, я не хочу замены для этого, мне просто интересно, как это возможно.
P.S. Я отмечаю это как С++, хотя код написан на C, потому что я предполагаю, что метод будет существовать на обоих языках. Если есть С++-специфический способ сделать это (используя языковые конструкции, а не библиотеки), мне также будет интересно узнать.
ОБНОВЛЕНИЕ: я полностью понимаю, что я могу выполнять бит операции самостоятельно. Я делал это тысячу раз в прошлом. Я НЕ заинтересован в ответе, который говорит, что вместо этого использует массив/вектор и выполняет манипуляции с битами. Я думаю только о том, возможно ли ЭТА КОНСТРУКЦИЯ или нет, НЕ альтернатива.
Обновление: ответ для нетерпеливых (спасибо neagoegab):
Вместо
typedef unsigned int bit:1;
Я мог бы использовать
typedef struct
{
unsigned int value:1;
} bit;
правильно используя #pragma pack