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
}
Всё работает, почти всё понятно кроме одного, что это такое
GetLogicalDrives возвращает маску существующих дисков в системе, т.е. напрмер младшие биты результата ....11101 означают, что в системе присутствуют диски E, D, C, A. Соответственно чтобы проверить установлен ли какой либо бит необходимо последовательно просканировать Dr. выражением (Dr>>i) вся последовательность бит сдвигается вправо и на первой позиции оказывается сканируемый i-тый бит, затем операцией & 0x00000001 он выделяется из остальных. Если полученный результат равняется нулю, то данный диск отсутствует в системе, иначе же отображаем наличие данного диска.
Ne0N писал(а):GetLogicalDrives возвращает маску существующих дисков в системе, т.е. напрмер младшие биты результата ....11101 означают, что в системе присутствуют диски E, D, C, A. Соответственно чтобы проверить установлен ли какой либо бит необходимо последовательно просканировать Dr. выражением (Dr>>i) вся последовательность бит сдвигается вправо и на первой позиции оказывается сканируемый i-тый бит, затем операцией & 0x00000001 он выделяется из остальных. Если полученный результат равняется нулю, то данный диск отсутствует в системе, иначе же отображаем наличие данного диска.
А почему тогда пишем & 0x00000001, а не & 00000001?
без разницы. Число то одно и то же - 1, хоть в какой системе счисления.
P.S. видимо тебя 0x с толку сбило - это обозначение шестнадцатиричной системы счисления
Ne0N писал(а):без разницы. Число то одно и то же - 1, хоть в какой системе счисления.
P.S. видимо тебя 0x с толку сбило - это обозначение шестнадцатиричной системы счисления
Да, наверное. Просто ещё 0x00000001 это код ошибки. Вот это меня и запутало. Спасибо вам.