Octal
The octal numeral system, or oct for short, is the base-8 number system, and uses the digits 0 to 7. Octal numerals can be made from binary numerals by grouping consecutive binary digits into groups of three. For example, the binary representation for decimal 74 is 1001010. Two zeroes can be added at the left: , corresponding the octal digits, yielding the octal representation 112.
In the decimal system each decimal place is a power of ten. For example:
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 64+8+2 = 74 in decimal.
× | 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
By Native Americans
The Yuki language in California and the Pamean languages in Mexico have octal systems because the speakers count using the spaces between their fingers rather than the fingers themselves.By Europeans
- It has been suggested that the reconstructed Proto-Indo-European 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.
- In 1668, John Wilkins in 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".
- In 1716, King Charles XII of Sweden asked Emanuel Swedenborg to elaborate a number system based on 64 instead of 10. Swedenborg however argued 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 a manuscript: "En ny rekenkonst som om vexlas wid Thalet 8 i stelle then wanliga wid Thalet 10". The numbers 1-7 are there denoted by the consonants l, s, n, m, t, f, u 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.
- Writing under the pseudonym "Hirossa Ap-Iccim" in The Gentleman's Magazine, July 1745, Hugh Jones proposed an octal system for British coins, weights and measures. "Whereas reason and convenience indicate to us an uniform standard for all quantities; which I shall call the Georgian standard; and that is only to divide every integer in each species into eight equal parts, and every part again into 8 real or imaginary particles, as far as is necessary. For tho' all nations count universally by tens yet 8 is a far more complete and commodious number; since it is divisible into halves, quarters, and half quarters without a fraction, of which subdivision ten is uncapable...." In a later treatise on Octave computation 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."
- 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.
- In the mid-19th century, Alfred B. Taylor concluded that "Our octonary 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 would be spoken in octonary as under-un. Taylor also republished some of Swedenborg's work on octal as an appendix to the above-cited publications.
In computers
All modern computing platforms, however, use 16-, 32-, or 64-bit words, further divided into eight-bit bytes. On such systems three octal digits per byte would be required, with the most significant octal digit representing two binary digits. Octal representation of a 16-bit word requires 6 digits, but the most significant octal digit represents only one bit. This representation offers no way to easily read the most significant byte, because it's smeared over four octal digits. Therefore, hexadecimal is more commonly used in programming languages today, since two hexadecimal digits exactly specify one byte. Some platforms with a power-of-two word size still have instruction subwords that are more easily understood if displayed in octal; this includes the PDP-11 and Motorola 68000 family. The modern-day ubiquitous x86 architecture belongs to this category as well, but octal is rarely used on this platform, although certain properties of the binary encoding of opcodes become more readily apparent when displayed in octal, e.g. the ModRM byte, which is divided into fields of 2, 3, and 3 bits, so octal can be useful in describing these encodings.
Octal is sometimes used in computing instead of hexadecimal, perhaps most often in modern times in conjunction with file permissions under Unix systems. It has the advantage of not requiring any extra symbols as digits. It is also used for digital displays.
In programming languages, octal literals are typically identified with a variety of prefixes, including the digit 0, the letters o or q, the digit–letter combination 0o, or the symbol & or $. In Motorola convention, octal numbers are prefixed with @, whereas a small letter o or q is added as a postfix following the Intel convention. In Concurrent DOS, Multiuser DOS and REAL/32 as well as in DOS Plus and DR-DOS various environment variables like $CLS, $ON, $OFF, $HEADER or $FOOTER support an \nnn octal number notation, and DR-DOS DEBUG utilizes \ to prefix octal numbers as well.
For example, the literal 73 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, 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 C language; it is supported by Haskell, OCaml, Python as of version 3.0, Raku, Ruby, Tcl as of version 9, and it is intended to be supported by ECMAScript 6.
Octal numbers that are used in some programming languages for textual/graphical representations of byte strings when some byte values 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 floating point in the Ferranti Atlas, Burroughs B5500, Burroughs B5700, Burroughs B6700 and Burroughs B7700 computers.
In aviation
in aircraft transmit a 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:
Therefore, 12510 = 1758.
Another example:
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:
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 to decimal, use the formula that defines its base-8 representation:In this formula, is an individual octal digit being converted, where is the position of the digit.
Example: Convert 7648 to decimal:
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:
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 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:
Therefore, 10101111002 = 12748.
Convert binary 11100.01001 to octal:
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:
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:
Therefore, 3FA516 = 376458.