我想知道代码片段的作用..
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 :(得分: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)
检查数字是否为奇数。
0101 (5)
& 0001 (1)
= 0001 (1 -- true)
1110 (14)
& 0001 (1)
= 0000 (0 -- false)
在这种情况下,GetLogicalDrives返回一个数字,其位表示存在某些驱动器。最低有效位(2 0 ,1)表示A驱动器。
答案 4 :(得分:1)
表达式Drives & 1
正在测试and
和Drives
之间的逻辑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系统中所有可能的单字母驱动器名称。它检查系统中是否存在由该字母指定的逻辑驱动器。如果驱动器存在,它会检查此驱动器是否与可移动介质一起使用。而且,最后,如果它是真的,那么它会做一些你没有向我们展示的有用的东西。我不知道它是什么。没有人这样做。