Это довольно простой вопрос, и я уверен, что есть легкий ответ на него, но я не знаю, какой поисковый запрос я должен использовать для поиска ответа. Вот оно:Почему десятичные числа используются в битмасках?
Я пытаюсь понять, как работают битмаски. В системах Linux есть:
struct stat
, который имеет элемент st_mode, который используется, чтобы определить, является ли файл проверяемого обычный файл, каталог, символическая ссылка, и другие. Таким образом, можно написать простую функцию, которую можно передать имя и получить, является ли или нет имя каталога:
16 int isadir(char *name)
17 /*
18 * calls stat, then masks the st_mode word to obtain the
19 * filetype portion and sees if that bit pattern is the
20 * pattern for a directory
21 */
22 {
23 struct stat info;
24
25 return (stat(name,&info)!=-1 && (info.st_mode & S_IFMT) == S_IFDIR);
26 }
Когда я смотрю на битовую, я вижу, это представляется следующим образом:
/* Encoding of the file mode. */
#define __S_IFMT 0170000 /* These bits determine file type. */
Я думал, что битмаски могут иметь только 0 и 1 сек. Почему в маске 7?
Мое предположение было бы константой, выраженной в восьмеричном (основание 8) –
Все номера хранятся внутри как двоичные числа. Ведущий 0 указывает на восьмеричность. Чуть проще для людей вводить и читать. При компиляции он заканчивается двоичным. – QuentinUK
Это важный момент, если вы собираетесь писать или читать c. Ведущие нули * значительны * в целочисленных константах, когда они устанавливают базу. Аналогично, ведущие '0x' или' 0X', которые обозначают шестнадцатеричный (база 16). – dmckee