что делает фрагмент кода - PullRequest
2 голосов
/ 17 июня 2010

Я хотел бы знать, что делает фрагмент кода ..

 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 ]

4 голосов
/ 17 июня 2010

Проверяет, установлен ли младший бит, т. Е. Имеется ли диск A .См. GetLogicalDrives

3 голосов
/ 17 июня 2010

Перечисляет все возможные подключенные диски между A: \ и Z: \ и проверяет, являются ли они съемными (например, CD, дискета).

Зацикливается 26 раз и каждый раз

DriveMask >>= 1;

заставляет битовую маску смещаться вправо на 1 бит, поэтому каждый логический диск может быть проверен последовательно через

if( DriveMask & 1 )

.

GetDriveType ()требуется путь к диску, поэтому метка создается путем добавления числа циклов к букве A (т. е. A, B, C, D, ..., Z) и оставления ранее инициализированной: \ part на месте.

2 голосов
/ 17 июня 2010

В C ++ & является побитовым и.

Так что возьмите значение Drives и сделайте побитовое с 0x00000001.Результат должен быть 1, если число нечетное (единственный способ получить нечетное число - с младшим битом - 1).Так как 0 и 1 = 0, он обнуляет все значения, кроме младшего значащего бита.Если этот бит равен 1, то результат равен 1 и имеет значение true.

В противном случае это 0, и вы не нажмете if.

1 голос
/ 17 июня 2010

Функция GetLogicalDrives возвращает набор логических дисков, где каждый диск закодирован как бит (двоичная цифра, может быть 0 или 1). Метки привода начинаются с буквы «A» в бите 0 (младший значащий бит). Бит равен 1, если диск присутствует, в противном случае он равен 0. Символ & в приведенном выше коде - это логическая операция И для проверки бита 0. По сути, этот код проверяет, есть ли в системе диск «A: \».

1 голос
/ 17 июня 2010

фактически API возвращает ответ в двоичном формате: - вот что MSDN говорит об этом

» Если функция завершается успешно, возвращаемое значение представляет собой битовую маску, представляющую доступные на данный момент дисководы. Битовая позиция 0 (младший бит) - это диск A, битовая позиция 1 - это диск B, битовая позиция 2 - это диск C и т. Д. «

означает

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

}

Проверка состояния на наличие цифрового привода.

1 голос
/ 17 июня 2010

Выражение Drives & 1 проверяет, чтобы увидеть, что результат логического and между Drives и 0x00000001 не равен нулю.Таким образом, проверяется, является ли Drives нечетным.

1 голос
/ 17 июня 2010

Он проверяет, является ли число нечетным.

& является побитовым И сравнение .

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

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

В этом случае GetLogicalDrives возвращает aномер, биты которого указывают на наличие определенных дисков.Младший значащий бит (2 0 , 1) указывает на диск A.

0 голосов
/ 17 июня 2010

Этот фрагмент кода не делает абсолютно ничего в общем понимании слова do .Этот код содержит только немодифицируемые операции типа запроса без побочных эффектов, то есть он выполняет некоторые запросы и проверяет некоторые условия, но не выполняет никаких действий на основе результатов этих условий.

В другихсловами, если бы этот код был введен в какой-то гипотетический супероптимизирующий компилятор, который также знает Windows API, этот компилятор просто выбросил бы (оптимизировал) весь код, поскольку он ничего не делает .

Судя по всему, предоставленный вами код является поддельным - это не весь код.Без всего этого невозможно сказать, что предполагалось сделать .Однако, если мы предположим, что некоторая полезная функциональность должна присутствовать между {} в следующих if

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

, то мы можем сделать обоснованное предположение о том, что он должен был делать.Этот код повторяет все возможные однобуквенные обозначения дисков в системе Windows.Он проверяет, присутствует ли в системе логический диск, обозначенный этой буквой.И если диск присутствует, он проверяет, работает ли этот диск со съемным носителем.И, наконец, если это правда, тогда он делает что-то полезное, что вы нам не показываете.Я не знаю что это былоНикто не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...