我想從32位寄存器中讀取第2,第5和第6位。我決定使用結構位域來存儲它們。以下數據結構是否正確?用於從H/W寄存器中讀取的位域
struct readData
{
int unwanted:1;
int reqbit1:1;
int unwanted1:2;
int reqbit2:2;
int unwanted2:26;
};
我不確定位字段是如何創建的。我將使用一個API來直接將h/w寄存器中的字節複製到此結構中。在這種情況下,reqbit1是否包含第二位?根據我的理解,編譯器將第一位分配給一個int變量,將第二位分配給另一個int變量,因此reqbit1不會從寄存器讀取任何數據。下面的工會不適合這種情況嗎?
union readData
{
struct readBits{
bool unwanted:1;
bool reqbit1:1;
xxx unwanted1:2;
short reqbit2:2;
xxx unwanted2:26;
};
int regValue;
};
如果這是正確的,我應該聲明unwanted2爲什麼?
使用1位有符號位域通常是一個非常糟糕的主意。你可以存儲的值只有'-1'或'0',這只是令人困惑。使他們'無符號'。 – unwind
@unwind如果我只是在我的結構中將所有int都更改爲unsigned int,是否可以?我不需要使用工會從註冊表中讀取嗎? – linuxfreak