複製鏈接
請複製以下鏈接發送給好友

八進制

鎖定
八進制,Octal,縮寫OCT或O,一種以8為基數的計數法,採用0,1,2,3,4,5,6,7八個數字,逢八進1。一些編程語言中常常以數字0開始表明該數字是八進制。八進制的數和二進制數可以按位對應(八進制一位對應二進制三位),因此常應用在計算機語言中。
中文名
八進制
外文名
Octal
基    數
8
解    釋
逢八進一

八進制計數法介紹

Octal,縮寫OCT或O,一種以8為基數的計數法,採用0,1,2,3,4,5,6,7八個數字,逢八進1。一些編程語言中常常以數字0開始表明該數字是八進制。八進制的數和二進制數可以按位對應(八進制一位對應二進制三位),因此常應用在計算機語言中。
八進制(基數為8)表示法在計算機系統中很常見,因此,我們有時能看到人們使用八進制表示法。由於十六進制一位可以對應4位二進制數字,用十六進制來表示二進制較為方便。因此,八進制的應用不如十六進制。有一些程序設計語言提供了使用八進制符號來表示數字的能力,而且還是有一些比較古老的Unix應用在使用八進制。
計算機需要數制轉換,計算機內部使用二進制,二進制八進制十進制之間的數制轉換,FORTRAN77 編制, 圍繞二進制與小數,完成二進制八進制十進制之間的數制轉換。 [1] 

八進制計數法歷史

有人提出,原始印歐語系“九”這個詞可能與派為“新”字。在此基礎上,有人猜測,原始印歐語系使用一個八進制數系統。
1668年約翰·威爾金斯的一篇文章中向一個真正的系統和哲學語言提出使用8為基數,而不是10,因為二分法將數字分為兩部分是最自然的方式,據此,這個數字能與下一個數值相統一。
1716年瑞典國王查理十二令Swedenborg闡述基數為64而不是10個。然而Swedenborg認為比國王智力較低的人太難理解,因此提出8為基數。1 - 7的數字有什麼用輔音字母l,年代,n,m,t,f,u(v)和零的元音o。因此8 =“lo”,16 =“so”,24 =“no”,64 =“loo”,512 =“looo”等數字連續輔音與元音發音之間依照特殊的規則。[5]
1745年7月,休·瓊斯提出一個八進制系統為英國硬幣,度量衡。而原因是告訴我們一個統一的標準對所有量更加方便;它被稱之為格魯吉亞標準;他將每個整數劃分為八個相等的部分,每個部分又分成8個真實或假想的例子。當時所有國家普遍使用基數十(最初雙手的數字),然而8是一個更完整的和寬敞的號碼;因為它是整除半,季度,半季度(或單位)沒有分數,容易細分 ....甚至在後來的論述“八位計算的瓊斯(1753)認為:“八進制算術似乎是最稱心如意的事情,同時最接近事物的本質,因此可稱為最為自然的數,雖然現在反對使用它,幾十年後;這可能是受人歡迎的算術。”
1801年,詹姆斯·安德森批評法國公制基於十進制運算。在他的建議下創造了八進制。建議一個純粹的八進制度量衡制度和觀察到的現有系統英語單位已經很大程度上進化為一個八進制系統。
在19世紀中期,阿爾弗雷德·泰勒認為,“如果我們以八基數,那麼將超越所有的計數法”因為它是一個最好的算術系統”。“提案包括新的數字的圖形符號和新名稱的數字”,包括unty, duty, thety, foty, paty, sety, kity and under等等。例如,數字65十進制(101)在八進制的口語稱為under-un [2] 

八進制計數法應用

八進制廣泛應用於計算機系統,如PDP-8,ICL 1900和IBM大型機使用12位、24位或36位。八進制是這些基礎,因為他們的最理想的二進制字縮寫大小能被3整除(每個八進制數字代表三個二進制數字)。四、八到十二個數字可以簡明地顯示整個機器。它也降低成本使得數字允許通過數碼管,七段顯示器,和計算器用於操作員控制枱,他們在二進制顯示使用過於複雜,然而十進制顯示需要複雜的硬件,十六進制顯示需要顯示更多的數字。
然而,所有現代計算平台使用16 - 32位,或者64位,如果使用64位,將進一步劃分為八位字節。這種系統三個八進制數字就能滿足每字節需要,與最重要的八進制數字代表兩個二進制數字(+ 1為下一個字節,如果有的話)。16位字的八進制表示需要6位數,但最重要的八進制數字代表(通過)只有一個(0或1)。這表示無法提供容易閲讀的字節,因為它是在4位八進制數字。
因此,今天十六進制為更常用的編程語言,因為兩個十六進制數字完全指定一個字節。一些平台的2的冪,字的大小還有指令更容易理解。現代無處不在的x86體系架構也屬於這一類,但八進制很少使用這個架構,儘管某些屬性的操作碼的二進制編碼變得更加顯而易見,當顯示在八進制時,如ModRM字節,它分為2、3和3位,所以八進制可用於描述這些編碼。
八進制有時被用於計算而不是十六進制,也許最常在現代與文件權限下Unix系統。它的優點是不需要任何額外的符號位數(十六進制系統是基數16,因此需要六個附加符號超出0 - 9)。它全部用於數字顯示。
在編程語言中,八進制文字通常與不同的前綴,包括數字0,字母o或q,digit-letter 0 o組合,或符號&[11]或美元。在摩托羅拉慣例,八進制數字加@前綴,而小字母o作為後綴添加,在英特爾公約。DR-DOS調試使用前綴編輯八進制數字。
例如,文字73(8進制)可以表示為 073, o73, q73, 0o73, \73, @73, &73, $73 or 73o 在各種語言。
新語言已經放棄前綴0,小數常常用前導零表示。避免前綴o被誤認為是零,而前綴0開始介紹了o避免數值文字以英文字母(如o或q),因為這些可能會導致文字混淆變量名。前綴0 o也遵循了模型設定的前綴0 x用於十六進制字符C語言;它支持Haskell,OCaml,Perl 6,Python 3.0版本,Ruby,Tcl version 9,它的目的是成為支持ECMAScript 6(前綴0已經廢棄的ECMAScript 3和ECMAScript 5[21])。
八進制數字使用在某些編程語言(C、Perl、PostScript…)的文本/圖形化表示字節字符串當一些字節值(一個代碼頁中代表非圖形,在當前上下文特殊意義。 [3] 

八進制計數法轉換

二進制與八進制的互相轉換和二進制與十六進制的轉換類似,區別在於需要操作的是三位一組而不是四位。表2-2列出了二進制與八進制的等效表示。
為了把八進制數換算為二進制,將每一個八進制數字替換成表2-2中對應的三位。例如,八進制123換算成二進制的結果就是001010011:
1
2
3
001
010
011
表2-2 二進制/八進制換算表
二進制
八進制
000
0
001
1
010
2
011
3
100
4
101
5
110
6
111
7
為了將一個二進制數換算為八進制,只需將二進制串劃分成每三個位一組(如果需要的話,在前面補零),然後查表2-2,將三位一組的位串替換為相應的八進制數字即可。
如果需要將八進制數換算為十六進制,只需將八進制數換算為二進制,然後再換算為十六進制即可。
八進制化為十進制
例:將八進制數12轉換成十進制數
八進制化為二進制
規則:按照順序,每1位八進制數改寫成等值的3位二進制數,次序不變。
例: (17.36)8 = (001 111 .011 110)2 = (1111.01111)2
八進制化為十六進制
先將八進制化為二進制,再將二進制化為十六進制。
例:(712)8 = (1110 0101 0)2 = (1CA)16
轉換為八進制
二進制化為八進制
整數部份從最低有效位開始,以3位一組,最高有效位不足3位時以0補齊,每一組均可轉換成一個八進制的值,轉換完畢就是八進制的整數。
小數部份從最高有效位開始,以3位一組,最低有效位不足3位時以0補齊,每一組均可轉換成一個八進制的值,轉換完畢就是八進制的小數。
例:(11001111.01111)2 = (011 001 111.011 110)2 = (317.36)8
十六進制化為八進制
先用1化4方法,將十六進制化為二進制;再用3並1方法,將二進制化為8制。
例: (1CA)16 = (111001010)2 = (712)8
説明:小數點前的高位零和小數點後的低位零可以去除。
十進制化八進制
方法1:採用除8取餘法。
例:將十進制數115轉化為八進制數
8| 115…… 3
8| 14 …… 6
8| 1 …… 1
結果:(115)10 = (163)8
十進制化八進制示例 十進制化八進制示例
方法2:先採用十進制化二進制的方法,再將二進制數化為八進制數
例:(115)10 = (1110011)2 = (163)8
C語言中的表達
在C語言裏,整數有三種表示形式:十進制,八進制,十六進制。其中以數字0開頭,由0~7組成的數是八進制。以0X或0x開頭,由0~9,A~F或a~f 組成是十六進制。除表示正負的符號外,以1~9開頭,由0~9組成是十進制。
1.十進制:除表示正負的符號外,以1~9開頭,由0~9組成。如 128,+234,-278。
2,八進制:以0開頭,由0~7組成的數。如 0126, 050000.
3,十六進制:以0X或0x開頭,由0~9,A~F或a~f 組成。如 0x12A, 0x5a000。
參考資料
  • 1.    二進制八進制十進制之間的數制轉換  .中國知網[引用日期2017-01-14]
  • 2.    Winter, Werner.Some thoughts about Indo-European numerals:Indo-European numerals,1911
  • 3.    Alfred B. Taylor.Octonary numeration and its application to a system of weights and measures:Philadelphia,1887:296-366