Octal
hex | dec | oct | 3 | 2 | 1 | 0 | step |
---|---|---|---|---|---|---|---|
0hex | 0dec | 0oct | 0 | 0 | 0 | 0 | 0 |
1hex | 1dec | 1oct | 0 | 0 | 0 | 1 | 1 |
2hex | 2dec | 2oct | 0 | 0 | 1 | 0 | 3 |
3hex | 3dec | 3oct | 0 | 0 | 1 | 1 | 2 |
4hex | 4dec | 4oct | 0 | 1 | 0 | 0 | 7 |
5hex | 5dec | 5oct | 0 | 1 | 0 | 1 | 6 |
6hex | 6dec | 6oct | 0 | 1 | 1 | 0 | 4 |
7hex | 7dec | 7oct | 0 | 1 | 1 | 1 | 5 |
8hex | 8dec | 10oct | 1 | 0 | 0 | 0 | F |
9hex | 9dec | 11oct | 1 | 0 | 0 | 1 | E |
Ahex | 10dec | 12oct | 1 | 0 | 1 | 0 | C |
Bhex | 11dec | 13oct | 1 | 0 | 1 | 1 | D |
Chex | 12dec | 14oct | 1 | 1 | 0 | 0 | 8 |
Dhex | 13dec | 15oct | 1 | 1 | 0 | 1 | 9 |
Ehex | 14dec | 16oct | 1 | 1 | 1 | 0 | B |
Fhex | 15dec | 17oct | 1 | 1 | 1 | 1 | A |
Part of a series on |
Numeral systems |
---|
List of numeral systems |
Octal (base 8) is a
In the decimal system, each place is a
In the octal system, each place is a power of eight. For example:
By performing the calculation above in the familiar decimal system, we see why 112 in octal is equal to in decimal.
Octal numerals can be easily converted from
× | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 |
1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 |
2 | 2 | 4 | 6 | 10 | 12 | 14 | 16 | 20 |
3 | 3 | 6 | 11 | 14 | 17 | 22 | 25 | 30 |
4 | 4 | 10 | 14 | 20 | 24 | 30 | 34 | 40 |
5 | 5 | 12 | 17 | 24 | 31 | 36 | 43 | 50 |
6 | 6 | 14 | 22 | 30 | 36 | 44 | 52 | 60 |
7 | 7 | 16 | 25 | 34 | 43 | 52 | 61 | 70 |
10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 100 |
Usage
In China

The eight bagua or trigrams of the I Ching correspond to octal digits:
- 0 = ☷, 1 = ☳, 2 = ☵, 3 = ☱,
- 4 = ☶, 5 = ☲, 6 = ☴, 7 = ☰.
Gottfried Wilhelm Leibniz made the connection between trigrams, hexagrams and binary numbers in 1703.[1]
By Native Americans
- The Yuki language in California has an octal system because the speakers count using the spaces between their fingers rather than the fingers themselves.[2]
- The
By Europeans
- It has been suggested that the reconstructed Proto-Indo-European (PIE) word for "nine" might be related to the PIE word for "new". Based on this, some have speculated that proto-Indo-Europeans used an octal number system, though the evidence supporting this is slim.[4]
- In 1668, An Essay towards a Real Character, and a Philosophical Language proposed use of base 8 instead of 10 "because the way of Dichotomy or Bipartition being the most natural and easie kind of Division, that Number is capable of this down to an Unite".[5]
- In 1716, King Charles XII of Sweden asked Emanuel Swedenborg to elaborate a number system based on 64 instead of 10. Swedenborg argued, however, that for people with less intelligence than the king such a big base would be too difficult and instead proposed 8 as the base. In 1718 Swedenborg wrote (but did not publish) a manuscript: "En ny rekenkonst som om vexlas wid Thalet 8 i stelle then wanliga wid Thalet 10" ("A new arithmetic (or art of counting) which changes at the Number 8 instead of the usual at the Number 10"). The numbers 1–7 are there denoted by the consonants l, s, n, m, t, f, u (v) and zero by the vowel o. Thus 8 = "lo", 16 = "so", 24 = "no", 64 = "loo", 512 = "looo" etc. Numbers with consecutive consonants are pronounced with vowel sounds between in accordance with a special rule.[6]
- Writing under the pseudonym "Hirossa Ap-Iccim" in Octave computation (1753) Jones concluded: "Arithmetic by Octaves seems most agreeable to the Nature of Things, and therefore may be called Natural Arithmetic in Opposition to that now in Use, by Decades; which may be esteemed Artificial Arithmetic."[7]
- In 1801, James Anderson criticized the French for basing the metric system on decimal arithmetic. He suggested base 8, for which he coined the term octal. His work was intended as recreational mathematics, but he suggested a purely octal system of weights and measures and observed that the existing system of English units was already, to a remarkable extent, an octal system.[8]
- In the mid-19th century, Alfred B. Taylor concluded that "Our octonary [base 8] radix is, therefore, beyond all comparison the "best possible one" for an arithmetical system." The proposal included a graphical notation for the digits and new names for the numbers, suggesting that we should count "un, du, the, fo, pa, se, ki, unty, unty-un, unty-du" and so on, with successive multiples of eight named "unty, duty, thety, foty, paty, sety, kity and under." So, for example, the number 65 (101 in octal) would be spoken in octonary as under-un.[9][10] Taylor also republished some of Swedenborg's work on octal as an appendix to the above-cited publications.
In computers
Octal became widely used in computing when systems such as the UNIVAC 1050, PDP-8, ICL 1900 and IBM mainframes employed 6-bit, 12-bit, 24-bit or 36-bit words. Octal was an ideal abbreviation of binary for these machines because their word size is divisible by three (each octal digit represents three binary digits). So two, four, eight or twelve digits could concisely display an entire machine word. It also cut costs by allowing Nixie tubes, seven-segment displays, and calculators to be used for the operator consoles, where binary displays were too complex to use, decimal displays needed complex hardware to convert radices, and hexadecimal displays needed to display more numerals.
All modern computing platforms, however, use 16-, 32-, or 64-bit words, further divided into
Octal is sometimes used in computing instead of hexadecimal, perhaps most often in modern times in conjunction with
). It has the advantage of not requiring any extra symbols as digits (the hexadecimal system is base-16 and therefore needs six additional symbols beyond 0–9).In programming languages, octal
\
to prefix octal numbers as well.
For example, the literal 73 (base 8) might be represented as 073
, o73
, q73
, 0o73
, \73
, @73
, &73
, $73
or 73o
in various languages.
Newer languages have been abandoning the prefix 0
, as decimal numbers are often represented with leading zeroes. The prefix q
was introduced to avoid the prefix o
being mistaken for a zero, while the prefix 0o
was introduced to avoid starting a numerical literal with an alphabetic character (like o
or q
), since these might cause the literal to be confused with a variable name. The prefix 0o
also follows the model set by the prefix 0x
used for hexadecimal literals in the
0
originally stood for base 8 in JavaScript but could cause confusion,[28] therefore it has been discouraged in ECMAScript 3 and dropped in ECMAScript 5[29]Octal numbers that are used in some programming languages (C, Perl, PostScript...) for textual/graphical representations of byte strings when some byte values (unrepresented in a code page, non-graphical, having special meaning in current context or otherwise undesired) have to be to escaped as \nnn
. Octal representation may be particularly handy with non-ASCII bytes of UTF-8, which encodes groups of 6 bits, and where any start byte has octal value \3nn
and any continuation byte has octal value \2nn
.
Octal was also used for
In aviation
Transponders in aircraft transmit a "squawk" code, expressed as a four-octal-digit number, when interrogated by ground radar. This code is used to distinguish different aircraft on the radar screen.
Conversion between bases
Decimal to octal conversion
Method of successive Euclidean division by 8
To convert integer decimals to octal, divide the original number by the largest possible power of 8 and divide the remainders by successively smaller powers of 8 until the power is 1. The octal representation is formed by the quotients, written in the order generated by the algorithm. For example, to convert 12510 to octal:
- 125 = 82 × 1 + 61
- 61 = 81 × 7 + 5
- 5 = 80 × 5 + 0
Therefore, 12510 = 1758.
Another example:
- 900 = 83 × 1 + 388
- 388 = 82 × 6 + 4
- 4 = 81 × 0 + 4
- 4 = 80 × 4 + 0
Therefore, 90010 = 16048.
Method of successive multiplication by 8
To convert a decimal fraction to octal, multiply by 8; the integer part of the result is the first digit of the octal fraction. Repeat the process with the fractional part of the result, until it is null or within acceptable error bounds.
Example: Convert 0.1640625 to octal:
- 0.1640625 × 8 = 1.3125 = 1 + 0.3125
- 0.3125 × 8 = 2.5 = 2 + 0.5
- 0.5 × 8 = 4.0 = 4 + 0
Therefore, 0.164062510 = 0.1248.
These two methods can be combined to handle decimal numbers with both integer and fractional parts, using the first on the integer part and the second on the fractional part.
Method of successive duplication
To convert integer decimals to octal, prefix the number with "0.". Perform the following steps for as long as digits remain on the right side of the radix: Double the value to the left side of the radix, using octal rules, move the radix point one digit rightward, and then place the doubled value underneath the current value so that the radix points align. If the moved radix point crosses over a digit that is 8 or 9, convert it to 0 or 1 and add the carry to the next leftward digit of the current value. Add octally those digits to the left of the radix and simply drop down those digits to the right, without modification.
Example:
0.4 9 1 8 decimal value +0 --------- 4.9 1 8 +1 0 -------- 6 1.1 8 +1 4 2 -------- 7 5 3.8 +1 7 2 6 -------- 1 1 4 6 6. octal value
Octal to decimal conversion
To convert a number k to decimal, use the formula that defines its base-8 representation:
In this formula, ai is an individual octal digit being converted, where i is the position of the digit (counting from 0 for the right-most digit).
Example: Convert 7648 to decimal:
- 7648 = 7 × 82 + 6 × 81 + 4 × 80 = 448 + 48 + 4 = 50010
For double-digit octal numbers this method amounts to multiplying the lead digit by 8 and adding the second digit to get the total.
Example: 658 = 6 × 8 + 5 = 5310
Method of successive duplication
To convert octals to decimals, prefix the number with "0.". Perform the following steps for as long as digits remain on the right side of the radix: Double the value to the left side of the radix, using decimal rules, move the radix point one digit rightward, and then place the doubled value underneath the current value so that the radix points align. Subtract decimally those digits to the left of the radix and simply drop down those digits to the right, without modification.
Example:
0.1 1 4 6 6 octal value -0 ----------- 1.1 4 6 6 - 2 ---------- 9.4 6 6 - 1 8 ---------- 7 6.6 6 - 1 5 2 ---------- 6 1 4.6 - 1 2 2 8 ---------- 4 9 1 8. decimal value
Octal to binary conversion
To convert octal to binary, replace each octal digit by its binary representation.
Example: Convert 518 to binary:
- 58 = 1012
- 18 = 0012
Therefore, 518 = 101 0012.
Binary to octal conversion
The process is the reverse of the previous algorithm. The binary digits are grouped by threes, starting from the least significant bit and proceeding to the left and to the right. Add leading zeroes (or trailing zeroes to the right of decimal point) to fill out the last group of three if necessary. Then replace each trio with the equivalent octal digit.
For instance, convert binary 1010111100 to octal:
001 010 111 100 1 2 7 4
Therefore, 10101111002 = 12748.
Convert binary 11100.01001 to octal:
011 100 . 010 010 3 4 . 2 2
Therefore, 11100.010012 = 34.228.
Octal to hexadecimal conversion
The conversion is made in two steps using binary as an intermediate base. Octal is converted to binary and then binary to hexadecimal, grouping digits by fours, which correspond each to a hexadecimal digit.
For instance, convert octal 1057 to hexadecimal:
- To binary:
1 0 5 7 001 000 101 111
- then to hexadecimal:
0010 0010 1111 2 2 F
Therefore, 10578 = 22F16.
Hexadecimal to octal conversion
Hexadecimal to octal conversion proceeds by first converting the hexadecimal digits to 4-bit binary values, then regrouping the binary bits into 3-bit octal digits.
For example, to convert 3FA516:
- To binary:
3 F A 5 0011 1111 1010 0101
- then to octal:
0 011 111 110 100 101 0 3 7 6 4 5
Therefore, 3FA516 = 376458.
Real numbers
Fractions
Due to having only factors of two, many octal fractions have repeating digits, although these tend to be fairly simple:
Decimal base Prime factors of the base: 2, 5 Prime factors of one below the base: 3 Prime factors of one above the base: 11 Other Prime factors: 7 13 17 19 23 29 31 |
Octal base Prime factors of the base: 2 Prime factors of one below the base: 7 Prime factors of one above the base: 3 Other Prime factors: 5 13 15 21 23 27 35 37 | ||||
Fraction | Prime factors of the denominator |
Positional representation | Positional representation | Prime factors of the denominator |
Fraction |
1/2 | 2 | 0.5 | 0.4 | 2 | 1/2 |
1/3 | 3 | 0.3333... = 0.3 | 0.2525... = 0.25 | 3 | 1/3 |
1/4 | 2 | 0.25 | 0.2 | 2 | 1/4 |
1/5 | 5 | 0.2 | 0.1463 | 5 | 1/5 |
1/6 | 2, 3 | 0.16 | 0.125 | 2, 3 | 1/6 |
1/7 | 7 | 0.142857 | 0.1 | 7 | 1/7 |
1/8 | 2 | 0.125 | 0.1 | 2 | 1/10 |
1/9 | 3 | 0.1 | 0.07 | 3 | 1/11 |
1/10 | 2, 5 | 0.1 | 0.06314 | 2, 5 | 1/12 |
1/11 | 11 | 0.09 | 0.0564272135 | 13 | 1/13 |
1/12 | 2, 3 | 0.083 | 0.052 | 2, 3 | 1/14 |
1/13 | 13 | 0.076923 | 0.0473 | 15 | 1/15 |
1/14 | 2, 7 | 0.0714285 | 0.04 | 2, 7 | 1/16 |
1/15 | 3, 5 | 0.06 | 0.0421 | 3, 5 | 1/17 |
1/16 | 2 | 0.0625 | 0.04 | 2 | 1/20 |
1/17 | 17 | 0.0588235294117647 | 0.03607417 | 21 | 1/21 |
1/18 | 2, 3 | 0.05 | 0.034 | 2, 3 | 1/22 |
1/19 | 19 | 0.052631578947368421 | 0.032745 | 23 | 1/23 |
1/20 | 2, 5 | 0.05 | 0.03146 | 2, 5 | 1/24 |
1/21 | 3, 7 | 0.047619 | 0.03 | 3, 7 | 1/25 |
1/22 | 2, 11 | 0.045 | 0.02721350564 | 2, 13 | 1/26 |
1/23 | 23 | 0.0434782608695652173913 | 0.02620544131 | 27 | 1/27 |
1/24 | 2, 3 | 0.0416 | 0.025 | 2, 3 | 1/30 |
1/25 | 5 | 0.04 | 0.02436560507534121727 | 5 | 1/31 |
1/26 | 2, 13 | 0.0384615 | 0.02354 | 2, 15 | 1/32 |
1/27 | 3 | 0.037 | 0.022755 | 3 | 1/33 |
1/28 | 2, 7 | 0.03571428 | 0.02 | 2, 7 | 1/34 |
1/29 | 29 | 0.0344827586206896551724137931 | 0.0215173454106475626043236713 | 35 | 1/35 |
1/30 | 2, 3, 5 | 0.03 | 0.02104 | 2, 3, 5 | 1/36 |
1/31 | 31 | 0.032258064516129 | 0.02041 | 37 | 1/37 |
1/32 | 2 | 0.03125 | 0.02 | 2 | 1/40 |
Irrational numbers
The table below gives the expansions of some common irrational numbers in decimal and octal.
Number | Positional representation | |
---|---|---|
Decimal | Octal | |
square )
|
1.414213562373095048... | 1.3240 4746 3177 1674... |
√3 (the length of the diagonal of a unit cube) | 1.732050807568877293... | 1.5666 3656 4130 2312... |
√5 (the length of the diagonal of a 1×2 rectangle) | 2.236067977499789696... | 2.1706 7363 3457 7224... |
φ (phi, the golden ratio = (1+√5)/2) | 1.618033988749894848... | 1.4743 3571 5627 7512... |
π (pi, the ratio of circumference to diameter of a circle) | 3.141592653589793238462643 383279502884197169399375105... |
3.1103 7552 4210 2643... |
e (the base of the natural logarithm) | 2.718281828459045235... | 2.5576 0521 3050 5355... |
See also
- Computer number format – Internal representation of numeric values in a digital computer
- Octal games, a game numbering system used in combinatorial game theory
- Split octal, a 16-bit octal notation used by the Heath Company, DEC and others
- Squawk code, a 12-bit octal representation of Gillham code
- Syllabic octal, an octal representation of 8-bit syllables used by English Electric
References
- ^ Leibniz, Gottfried Wilhelm (1703). "Explanation of binary arithmetic". leibniz-translations.com. Archived from the original on 2021-02-11. Retrieved 2022-03-02.
- JSTOR 2686959.
- (PDF) from the original on 2011-06-04. Retrieved 2007-11-21.
- ISBN 3-11-011322-8. Archivedfrom the original on 2023-04-01. Retrieved 2013-06-09.
- ^ Wilkins, John (1668). An Essay Towards a Real Character and a Philosophical Language. London. p. 190. Archived from the original on 2023-04-01. Retrieved 2015-02-08.
- ^ Donald Knuth, The Art of Computer Programming
- ^ See H. R. Phalen, "Hugh Jones and Octave Computation," The American Mathematical Monthly 56 (August–September 1949): 461-465.
- ^ James Anderson, On Octal Arithmetic [title appears only in page headers], Recreations in Agriculture, Natural-History, Arts, and Miscellaneous Literature Archived 2023-04-01 at the Wayback Machine, Vol. IV, No. 6 (February 1801), T. Bensley, London; pages 437-448.
- ^ Alfred B. Taylor, Report on Weights and Measures, Pharmaceutical Association, 8th Annual Session, Boston, 1859-09-15. See pages 48 and 53.
- ^ Alfred B. Taylor, Octonary numeration and its application to a system of weights and measures, Proc. Amer. Phil. Soc. Vol XXIV Archived 2023-04-01 at the Wayback Machine, Philadelphia, 1887; pages 296-366. See pages 327 and 330.
- ^ "TB Code Sheet". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte. 1 (1). December 1975.
- ^ Microsoft Corporation (1987). "Constants, Variables, Expressions and Operators". GW-BASIC User's Manual. Archived from the original on 2016-01-05. Retrieved 2015-12-12.
- ^ a b c "2.4.1 Numeric Constants". CP/M-86 - Operating System - Programmer's Guide (PDF) (3 ed.). Pacific Grove, California, USA: Digital Research. January 1983 [1981]. p. 9. Archived (PDF) from the original on 2020-02-27. Retrieved 2020-02-27. [1] (1+viii+122+2 pages)
- ISBN 978-3-528-04952-2. 978-3-32292907-5. Archivedfrom the original on 2023-04-01. Retrieved 2015-08-05.
- ISBN 978-3-83489191-4. 978-3-83489191-4. Archivedfrom the original on 2023-04-01. Retrieved 2015-08-05.
- OpenDOS 7.01, including the description of many undocumented features and internals. It is part of the author's yet larger
MPDOSTIP.ZIP
collection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of theNWDOSTIP.TXT
file.) - ^ Paul, Matthias R. (2002-03-26). "Updated CLS posted". freedos-dev mailing list. Archived from the original on 2019-04-27. Retrieved 2014-08-06.
- Concurrent Controls, Inc.(CCI). 1997-02-10. HELP.HLP.
- ^ "Haskell 98 Lexical Structure". Archived from the original on 2021-04-11. Retrieved 2019-11-01.
- ^ OCaml: 7.1 Lexical conventions Archived 2013-07-01 at archive.today
- ^ Python 3: https://docs.python.org/3.1/reference/lexical_analysis.html#integer-literals Archived 2014-03-20 at the Wayback Machine
- ^ Perl 6: http://perlcabal.org/syn/S02.html#Radix_markers Archived 31 October 2014 at the Wayback Machine
- ^ RubySpec: https://github.com/ruby/ruby/blob/master/spec/ruby/core/string/to_i_spec.rb Archived 2022-05-29 at the Wayback Machine
- ^ Tcl: http://wiki.tcl.tk/498 Archived 2014-01-04 at the Wayback Machine
- ^ PHP.Watch - PHP 8.1: Explicit Octal numeral notation https://php.watch/versions/8.1/explicit-octal-notation Archived 2021-01-08 at the Wayback Machine
- ^ Rust literals and operators: https://doc.rust-lang.org/rust-by-example/primitives/literals.html Archived 2022-05-28 at the Wayback Machine
- ^ ECMAScript 6th Edition draft: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-numeric-literals Archived 16 December 2013 at the Wayback Machine
- ^ "Why does the radix for JavaScript's parseInt default to 8?". Stack Overflow. 2011-04-08. Archived from the original on 2020-08-06. Retrieved 2019-08-21.
- ^ "parseInt()", Mozilla Developer Network (MDN), archived from the original on 2014-03-05, retrieved 2014-01-03,
If the input string begins with "0" (a zero), radix is assumed to be 8 (octal) or 10 (decimal). Exactly which radix is chosen is implementation-dependent. ECMAScript 5 clarifies that 10 (decimal) should be used, but not all browsers support this yet
External links
- Octomatics is a numeral system enabling simple visual calculation in octal.
- Octal converter performs bidirectional conversions between the octal and decimal system.