Могу ли я иметь бит, который ссылается на другую часть битового поля C? - PullRequest
4 голосов
/ 30 июня 2019

Я пытаюсь найти фрагмент кода, в котором свойство структуры ссылается на определенный бит в другом свойстве той же структуры. Это будет выглядеть примерно так:

struct A {
    unsigned char type;
    unsigned char is_family_a : 1;  // should reference bit 7 of above somehow
};

struct A example;
example.type = 0x17;
printf("%i\n", example.is_family_a);  // 0
example.type = 0xF7;
printf("%i\n", example.is_family_a);  // 1

Я посмотрел на страницу cppreference и ничего не увидел. Я также осмотрел stackoverflow, но ничего не нашел. Кажется, это работает, если я использую макросы, но я думаю, что компилятор, вероятно, оптимизирует такие вещи лучше, чем я.

1 Ответ

5 голосов
/ 30 июня 2019

Это должно сделать это:

struct A {
    union {
        unsigned char type;
        struct {
            unsigned char : 7;  // remove for big endian
            unsigned char is_family_a : 1;  // should reference bit 7 of above somehow
        };
    };
};
...