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代表一个位吗?冒号代表位吗?

4

3 回答 3

3

就是这个想法,是的。它称为位域。该数字表示编码器要求该字段占用的位数。如果你把它们都加起来,你会发现它们加起来是 64。

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

当我用 C++ 编写设备驱动程序时,我不使用位域。我改用位掩码。当然,问题在于您必须了解您的平台如何对其字节进行排序。

于 2011-02-22T18:35:51.623 回答
3

这意味着Readable,每个占用一点,Writable占用3、51等等。ExecutableControlReserved

有关更多信息,请参阅http://publications.gbdirect.co.uk/c_book/chapter6/bitfields.html

UINT64 仅仅意味着整个位域将在一个 64 位无符号整数内。

于 2011-02-22T18:33:02.237 回答
1

这些是C 中的位域,因此您可以通过结构独立访问这些位。

于 2011-02-22T18:34:11.230 回答