代码片段做了什么

时间:2010-06-17 05:39:35

标签: c++ windows

我想知道代码片段的作用..

 Drive[0] = 'A';
 Drive[1] = ':';
 Drive[2] = '\\';
 Drive[3] = 0;

 DriveMask = GetLogicalDrives();

 for( anIndex = 0; anIndex < 26;
 anIndex++ ) 
{
    if( DriveMask & 1 )
     {
        Drive[0] = 'A' + anIndex;

        DriveMask >>= 1;

     }
 }

请让我知道你的答案。

感谢您抽出时间阅读我的帖子。

8 个答案:

答案 0 :(得分:4)

检查是否设置了最低位,即是否存在 A 驱动器。见GetLogicalDrives

答案 1 :(得分:3)

它枚举A:\和Z:\之间所有可能连接的驱动器,并检查它们是否可移动(例如CD,软盘)。

循环26次,每次

DriveMask >>= 1;

导致位掩码右移1位,以便可以通过

测试每个逻辑驱动器
if( DriveMask & 1 )

接连。

GetDriveType()需要一个驱动路径,因此通过将循环计数添加到字母A(所以A,B,C,D,...,Z)并保留以前初始化的:\ part来构造标签在的地方。

答案 2 :(得分:2)

在C ++中,&是按位和。

因此取值Drives并按位0x00000001执行。如果数字是奇数,则结果应为1(只有具有奇数的最低有效位为1的方式)。由于0和1 = 0,它基本上将除最低有效位之外的所有值都清零。如果该位为1,则结果为1并且计算结果为真。

否则它为0,你没有点击if。

答案 3 :(得分:1)

检查数字是否为奇数。

&bit-wise AND comparison

  0101  (5)
& 0001  (1)
= 0001  (1 -- true)

  1110  (14)
& 0001  (1)
= 0000  (0 -- false)

在这种情况下,GetLogicalDrives返回一个数字,其位表示存在某些驱动器。最低有效位(2 0 ,1)表示A驱动器。

答案 4 :(得分:1)

表达式Drives & 1正在测试andDrives之间的逻辑0x00000001的结果是否为非零。因此,它正在检查Drives是否为奇数。

答案 5 :(得分:1)

实际上api以二进制格式返回回复: - 这是MSDN所说的关于它的内容

” 如果函数成功,则返回值是表示当前可用磁盘驱动器的位掩码。位位置0(最低有效位)是驱动器A,位位置1是驱动器B,位位置2是驱动器C,依此类推。 “

表示

if( Drives & 1 ) // i dont understand this if condition here that what it checks ? {

}

检查数字驱动器存在的条件。

答案 6 :(得分:1)

GetLogicalDrives函数返回一组逻辑驱动器,其中每个驱动器编码为一位(二进制数字,可以是0或1)。驱动器标签从位0(最低有效位)的“A”开始。如果驱动器存在,则该位为1,否则为0。在上面的代码中是一个逻辑AND运算来测试位0.本质上这个代码检查系统是否有一个“A:\”驱动器。

答案 7 :(得分:0)

这段代码在对 do 这个词的共同理解中并没有做任何事情。此代码仅包含非修改查询类型的操作,没有副作用,即它会进行一些查询并验证某些条件,但它不会根据这些条件的结果进行任何操作。

换句话说,如果这段代码被输入到一些假设的超级优化编译器中,该编译器也知道Windows API,那么编译器就会抛出(优化掉)整个代码,因为它不会任何事情。

显然,您提供的代码是假的 - 它不是整个代码。没有整个事情,就不可能说出它应该做什么。但是,如果我们猜测以下{}中的if之间应该存在一些有用的功能

if( GetDriveType( Drive ) == DRIVE_REMOVABLE )
{
  // Actually DO something here
}
然后我们可以对它应该做什么进行有根据的猜测。此代码会迭代Windows系统中所有可能的单字母驱动器名称。它检查系统中是否存在由该字母指定的逻辑驱动器。如果驱动器存在,它会检查此驱动器是否与可移动介质一起使用。而且,最后,如果它是真的,那么它会做一些你没有向我们展示的有用的东西。我不知道它是什么。没有人这样做。