2015-12-03 54 views
4

許多語言(至少可以追溯到C。我對舊的文字不熟悉)似乎有這樣的習慣,整數文字可以寫在3個鹼基上,並且有以下記號:八進制文字的點是什麼

  • 0x0X或前綴鹼-16(十六進制)數
  • 0前綴鹼-8(八進制)數
  • 無前綴指鹼基-10(十進制)數

我瞭解十六進制和十進制的使用。它們遍佈整個地方,具有不同的用例,它們使代碼更具可讀性(and0x20000131072更清晰),並且不能混淆(一個帶有'x'或'X'init的數字作爲十進制數沒有意義)。

但是,八進制文字看起來對我來說是一個錯誤。首先,我從來沒有見過它們被使用過,並且似乎無法想象它會使代碼更易於使用它們的十六進制或十進制的單個用例。另外,它們可能會與十進制數字混淆(010是編程語言域之外的完美的十進制數)。

那麼,八進制文字是否有用,它們是某種形式的歷史遺留物,有時甚至是有用的,或者它們只是一個錯誤?

+0

您可以在linux中使用它們來執行類似'chmod'的命令。 –

+1

今天沒有正當理由使用它們,只是歷史包袱。 'chmod'等可能會使用它們,但沒有理由不選擇使用十六進制數字。也許他們只是想保存輸入一個額外的'x'。 – user694733

+2

更普遍的答案是,它們用於微控制器http://www.plcdev.com/octal_what_the_hex的領域。從維基百科來看:「當PDP-8,ICL 1900和IBM大型機等系統採用12位,24位或36位字時,Octal在計算機上得到了廣泛的應用,Octal是這些機器的理想二進制縮寫,他們的字大小可以被三個整除「 –

回答

3

想到的用例是文件權限,例如:

int retval = mkdir("/tmp/example", 0755); 

請參閱Unix的http://linux.die.net/man/2/mkdir

文件權限三組的三位表示:

  • 用戶:讀,寫,執行
  • 組:讀,寫,執行
  • 其他:讀,寫,執行

755代表用戶:讀,寫,執行;組:讀取,執行;其他:閱讀,執行。

0 --> 000 
1 --> 001 
2 --> 010 
3 --> 011 
4 --> 100 
5 --> 101 
6 --> 110 
7 --> 111 

所以八進制基礎是文件權限一個非常方便的符號:

巧合的是,基地8個數字可以使用完全相同三個位來表示。

如果使用基數10來指定模式,0755實際上將變爲493,就像在十六進制0x1ED中那樣,它不會清晰地映射到給定模式。

這裏,在基數8中,每個數字恰好是一組三位。

2

八進制文字最常見的用法是在UNIX類系統上指定文件權限。

通用文件權限是讀取,寫入和執行,這些可以應用於文件的用戶,文件的組或其他文件。

這裏有一個目錄列表的例子:

-rw------- 1 dbush  dbush  14982 Dec 2 14:23 test.txt 

在這個例子中,用戶具有讀寫權限,而組和「其他」沒有權限。

如果您要創建與使用open功能,這些權限的文件,你會做這樣的:

int fd = open("test.txt", O_WRONLY | O_CREAT, 0600); 

模式位被指定爲文件如下:

0400 : read for owner 
0200 : write for owner 
0100 : execute for owner 
0040 : read for group 
0020 : write for group 
0010 : execute for group 
0004 : read for other 
0002 : write for other 
0001 : execute for other 

因爲權限位以3爲一組,八進制表示法使得它更清楚權限是什麼。