2016-11-11 82 views
0

我有關於位操作和權限的以下教程問題,我不太明白。具體來說就像我所理解的那樣>> 3操作數是3個空格的位移,但是這會導致全部爲零的類型保護... | 0000400 | >> 3 00000000 | 4 ...?權限位操作查詢

// File types 
#define S_IFDIR (0040000)  // Directory 
#define S_IFREG (0100000)  // Regular file 
#define S_IFLNK (0120000)  // Symbolic link 
// Protection bits 
#define S_IRUSR (0000400)  // Read by owner 
#define S_IWUSR (0000200)  // Write by owner 
#define S_IXUSR (0000100)  // Execute by owner 
#define S_IRGRP (S_IRUSR >> 3) // Read by group 
#define S_IWGRP (S_IWUSR >> 3) // Write by group 
#define S_IXGRP (S_IXUSR >> 3) // Execute by group 
#define S_IROTH (S_IRGRP >> 3) // Read by others 
#define S_IWOTH (S_IWGRP >> 3) // Write by others 
#define S_IXOTH (S_IXGRP >> 3) // Execute by others 

請注意,上面的常量是八進制,而不是十進制或十六進制。

對於每一個在以下情況下,給位串的八進制表示,將捕捉到相關的特權:

一個。一個只能讀取和寫入其所有者的常規文件

b。一個可寫入其所有者但可由所有者/組/任何人讀取的常規文件

c。一個只對所有者/組/任何人可執行的常規文件

d。只有所有者可以讀取,創建文件或輸入的目錄

e。只有所有者可以創建文件的目錄,但任何人都可以讀/輸入

f。一個目錄所有者/組/任何人都可以閱讀,在創建文件,或者進入

答案:

一個。 0100600

b。 0100644

c。 0100111

d。 0040700

e。 0040755

f。 0040777

回答

0

具體B中我明白>> 3操作數是3位的位位移但是這將導致類型的一點保障全零... | 0000400 | >> 3 00000000 | 4 ...?

>> 3是3個比特,不是3位的位位移。在八進制表示中,每個數字對應於3位(8 = 2 ),所以3位移位將對應於移位八位表示的1位數字。

因此,00004000 >> 3 = 00000400以八進制表示。