2013-02-24 33 views
0

這是一個非常基本的問題,我確信它有一個簡單的答案,但我不知道我應該用來查找答案的搜索字詞。這裏是:爲什麼在掩碼中使用十進制數字?

我想了解位掩碼如何工作。在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個?

+4

我的猜測是常量以八進制表示(基數爲8) – 2013-02-24 03:59:33

+4

所有數字均以二進制數字形式存儲在內部。前導0表示八進制。人類可以輕鬆輸入和閱讀。編譯時,它最終會變成二進制。 – QuentinUK 2013-02-24 04:00:10

+0

這是一個重要的觀點,如果你要寫或讀c。前導零在整數常量中是*顯着*,因爲它們設置基數。同樣地,引導表示十六進制的「0x」或「0X」(以16爲底)。 – dmckee 2013-02-24 04:17:55

回答

3

一個字節是8位,可以用十進制(0到255),八進制(000到377),十六進制(00到FF)或二進制(00000000到11111111)表示。讓我們來數位,從第0位到第7位:


其實許多可以在任何基礎來表達,但主要是八和十六進制是當一個人要數分解成位方便;在八進制表示一個字節是更加簡單,因爲

z y x 

X是位0至2,ÿ是位3至5和Ž是位6和在爲例7.

因此,017八進制數是八進制鹼(8-基)表示

0 1 7 
00 001 111 

數字更容易被轉換爲二進制。 (在六分之一將是0F)。在C(...)中,八進制文字數字以前導零(0 ...)開頭,而在十六進制中,它們以前導0x(0x ...)開頭。因爲它是更容易可視化八進制表示的數字位,

022 & 017 

給人以二進制

"00 010 010" & 
"00 001 111" 

結果可以發現很容易

"00 000 010" 

在十進制,這將是18 & 15

+0

太棒了!感謝您的詳細解釋,它幫助了很多。看起來我在編號系統上有一些閱讀。 – Nate 2013-02-24 04:13:07

4

以前導0開頭的數字是八進制數 - 這是標準的C語法。

而這些可以用於位掩碼,特別是代表Unix的權限。

相關問題