Страница 1 из 1

Вывод дисков компьютора.

Добавлено: 17 апр 2013, 12:00
Frairs
Есть такой код:

Код: Выделить всё

int  n;
        char dd[4];

        // Маску доступных в системе дисков записываем в переменную Dr
        DWORD Dr = GetLogicalDrives();

        // Выводим доступные логические диски
        printf("3. Available disk drives\n\t");
                      
        
        
        
        for ( int i = 0; i < 26; i++ ) {  //26 строчных и прописных букв
                // Выделяем бит с порядковым номером i
                n = ((Dr>>i)&0x00000001);
                // Если бит равен 1, значит диск есть в системе
                if( n == 1 ) {
                        dd[0]=char (65 + i); // Буква диска
                        dd[1] = ':';
                        dd[2] = '\\';
                        dd[3] = 0;
                        printf("%s ", dd);
                } // if
        } 

Всё работает, почти всё понятно кроме одного, что это такое

Код: Выделить всё

n = ((Dr>>i)&0x00000001):
То что это побитовый сдвиг я понял, а вот почему именно 0x00000001? Что хранится по этой ссылке?

Re: Вывод дисков компьютора.

Добавлено: 17 апр 2013, 13:02
Ne0N
GetLogicalDrives возвращает маску существующих дисков в системе, т.е. напрмер младшие биты результата ....11101 означают, что в системе присутствуют диски E, D, C, A. Соответственно чтобы проверить установлен ли какой либо бит необходимо последовательно просканировать Dr. выражением (Dr>>i) вся последовательность бит сдвигается вправо и на первой позиции оказывается сканируемый i-тый бит, затем операцией & 0x00000001 он выделяется из остальных. Если полученный результат равняется нулю, то данный диск отсутствует в системе, иначе же отображаем наличие данного диска.

Re: Вывод дисков компьютора.

Добавлено: 17 апр 2013, 14:16
Frairs
Ne0N писал(а):GetLogicalDrives возвращает маску существующих дисков в системе, т.е. напрмер младшие биты результата ....11101 означают, что в системе присутствуют диски E, D, C, A. Соответственно чтобы проверить установлен ли какой либо бит необходимо последовательно просканировать Dr. выражением (Dr>>i) вся последовательность бит сдвигается вправо и на первой позиции оказывается сканируемый i-тый бит, затем операцией & 0x00000001 он выделяется из остальных. Если полученный результат равняется нулю, то данный диск отсутствует в системе, иначе же отображаем наличие данного диска.

А почему тогда пишем & 0x00000001, а не & 00000001?

Re: Вывод дисков компьютора.

Добавлено: 17 апр 2013, 14:24
Ne0N
без разницы. Число то одно и то же - 1, хоть в какой системе счисления.
P.S. видимо тебя 0x с толку сбило - это обозначение шестнадцатиричной системы счисления

Re: Вывод дисков компьютора.

Добавлено: 17 апр 2013, 14:32
Frairs
Ne0N писал(а):без разницы. Число то одно и то же - 1, хоть в какой системе счисления.
P.S. видимо тебя 0x с толку сбило - это обозначение шестнадцатиричной системы счисления

Да, наверное. Просто ещё 0x00000001 это код ошибки. Вот это меня и запутало. Спасибо вам.