2011-02-22 65 views
1

我会通过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表示单个位?冒号是否代表位?

+1

您正在寻找的术语是“位域” – Justin 2011-02-22 18:33:46

回答

3

这就是主意,是的。它被称为位域。数字表示编码器要求该字段占用的比特数。如果你把它们全部统计起来,你会看到它们总计为64.

问题是C++(与Ada不同)没有提供真正的方法来保证整个结构只占用64位。所以如果你在一个系统上编译它,而不是它被设计成运行的系统,我会检查它是否可以确定。

当我用C++编写设备驱动程序时,我不使用位域。我使用了位掩码。那里的问题当然是你必须意识到你的平台如何命令字节。