C++ 这段代码的作用是什么

C++ 这段代码的作用是什么,c++,windows,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; DriveM

我想知道这段代码的作用

 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;

     }
 }
驱动器[0]=“A”;
驱动器[1]=':';
驱动器[2]=“\\”;
驱动器[3]=0;
DriveMask=GetLogicalDrives();
对于(指数=0;指数<26;
索引++)
{
if(驱动器掩码和1)
{
驱动器[0]=“A”+A索引;
驱动器掩码>>=1;
}
}
请告诉我你的答案


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

它会检查号码是否为奇数

&
是一个


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

它检查是否设置了最低位,即是否存在A驱动器。请参见表达式
驱动器&1
正在测试
驱动器和
驱动器之间的逻辑
结果是否为非零。因此,它正在检查
驱动器是否是奇数。

实际上,api以二进制格式返回reply:-这里是MSDN对它的说明

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

意味着

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

}

<数字驱动显示的状态检查。

< P> C++ > <代码> /<代码>是位和./P> 因此,取值
Drives
并用0x00000001按位计算。如果该数字为奇数,则结果应为1(唯一获得奇数的方法是最低有效位为1)。由于0与1=0进行AND运算,因此它基本上将除最低有效位之外的所有值归零。如果该位为1,则结果为1并计算为true


否则它是0,您不会点击if。

GetLogicalDrives函数返回逻辑驱动器集,其中每个驱动器编码为位(二进制数字,可以是0或1)。驱动器标签从位0(最低有效位)中的“A”开始。如果驱动器存在,则位为1,否则为0。上述代码中的&是用于测试位0的逻辑AND操作。基本上,这段代码检查系统是否有“A:\”驱动器。

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

它循环了26次,每次都是

DriveMask >>= 1;
使位掩码右移1位,以便可以通过测试每个逻辑驱动器

if( DriveMask & 1 )
接二连三地


GetDriveType()需要一个驱动器路径,因此标签是通过将循环计数添加到字母a(因此a、B、C、D、…、Z)并保留先前初始化的:\part来构造的。

这段代码完全没有执行do这个词的一般理解。此代码仅包含无副作用的非修改查询类型操作,即它进行一些查询并验证一些条件,但不根据这些条件的结果执行任何操作

换句话说,如果将此代码输入到某个假设的超级优化编译器中,该编译器也知道Windows API,那么该编译器只会抛出(优化掉)整个代码,因为它什么都不做

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

if( GetDriveType( Drive ) == DRIVE_REMOVABLE )
{
  // Actually DO something here
}

然后我们可以对它应该做什么做一个有根据的猜测。此代码在Windows系统中迭代所有可能的单字母驱动器指定。它检查系统中是否存在由该字母指定的逻辑驱动器。如果驱动器存在,它会检查该驱动器是否与可移动介质一起工作。最后,如果这是真的,那么它做了一些有用的事情,你没有展示给我们。我不知道那是什么。没有人会这样做。

它会检查是否设置了0到25之间的所有位,即是否存在A-Z驱动器。它不会检查所有位,因为如果A不是驱动器,它就不会进入if和“DriveMask>>=1;”中;永远不会执行。噢,+1 calvin。。。错过了-我想我们可以假设它是/打算/检查它们,但是它被窃听了(检查同一个驱动器26次似乎没有意义)。看起来代码在我出城时已经更新了。原来的代码只检查驱动器A。新代码非常不同,上面的评论是正确的。哈,@Stephen Nutt。。。他不仅因为你的回答而改变了它,也因为我的回答而改变了它,引入了卡尔文指出的改变。移动目标,还是什么?谢谢你的回复,伙计,你能给我解释一下这个传动系面罩>>=1;当然-假设您有一个二进制位掩码10100101(十进制165=128+32+4+1)。。。“DriveMask>>=1”表示“将DriveMask按位向右移动1位”。所以在这种情况下,它将从10100101(165)变为01010010(十进制:64+16+2=82)。最右边的位下降,左边的零移位。本质上,这是一种“除以2”的说法。[空间不足-继续…]代码段中的意思是,将代表每个驱动器号的位下移,直到它位于最右边(1)的位置。在计算“if(DriveMask&1)”时,如果最右边的位(正在考虑的驱动器)是1(它是一个已安装的驱动器),则为真。更多信息请访问
if( GetDriveType( Drive ) == DRIVE_REMOVABLE )
{
  // Actually DO something here
}