我正在浏览一个Windows设备驱动程序,我看到了这样的结构代码:
struct driver1
{
UINT64 Readable : 1;
UINT64 Writable : 1;
UINT64 Executable : 1;
UINT64 Control : 3;
UINT64 Status : 1;
UINT64 Reserved : 51;
UINT64 Available1 : 5;
UINT64 IsMapped : 1;
};
每个UINT64
代表一个位吗?冒号代表位吗?
答案 0 :(得分:3)
这意味着Readable
,Writable
和Executable
每个占用一点,Control
占用3,Reserved
51等等。
有关详细信息,请参阅http://publications.gbdirect.co.uk/c_book/chapter6/bitfields.html。
UINT64只是意味着整个位域都在64位无符号整数内。
答案 1 :(得分:3)
这就是想法,是的。它叫做bitfield。该数字表示编码器要求该字段占用的位数。如果你把它们全部计算在内,你会发现它们总计达64个。
问题是C ++(与Ada不同)没有提供真正的方法来保证整个结构只占用64位。因此,如果您在一个系统上进行编译,而不是设计运行的系统,我会检查它以确定。
当我用C ++编写设备驱动程序时,我不使用位域。我改用bitmasks。那里的问题当然是你必须知道你的平台如何命令它的字节。
答案 2 :(得分:1)
这些是bitfields in C,因此您可以通过struct独立访问这些位。