32 ビットレジスタから 2 ビット目、5 ビット目、6 ビット目を読み取りたいです。それらを格納するために構造体ビット フィールドを使用することにしました。次のデータ構造は正しいですか?
struct readData
{
int unwanted:1;
int reqbit1:1;
int unwanted1:2;
int reqbit2:2;
int unwanted2:26;
};
ビットフィールドがどのように作成されるかはわかりません。ハードウェア レジスタからこの構造体にバイトを直接コピーする API を使用します。その場合、reqbit1 には 2 番目のビットが含まれますか? 私の理解では、コンパイラは最初のビットを int 変数に割り当て、2 番目のビットは別の int 変数に割り当てるため、reqbit1 にはレジスタから読み取られるデータがありません。この状況には、次のユニオンの方が適しているのではないでしょうか?
union readData
{
struct readBits
{
bool unwanted:1;
bool reqbit1:1;
xxx unwanted1:2;
short reqbit2:2;
xxx unwanted2:26;
};
int regValue;
};
これが正しい場合、undeded2 を何と宣言すればよいでしょうか?