From Wikipedia, the free encyclopedia  View original article
Numeral systems by culture 


Positional systems by base 
Decimal (10) 
Nonstandard positional numeral systems 
List of numeral systems 
The octal numeral system, or oct for short, is the base8 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 (starting from the right). For example, the binary representation for decimal 74 is 1001010, which can be grouped into (00)1 001 010 – so the octal representation is 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 
The Yuki language in California and the Pamean languages^{[1]} in Mexico have octal systems because the speakers count using the spaces between their fingers rather than the fingers themselves.^{[2]}
In the 2009 film Avatar, the language of the extraterrestrial Na'vi race employs an octal numeral system, probably due to the fact that they have four fingers on each hand.^{[9]}
In the TV series Stargate SG1, the Ancients, a race of beings responsible for the invention of the Stargates, used an octal system of mathematics.
In the tabletop game series Warhammer 40,000, the Tau race use an octal number system.
Octal became widely used in computing when systems such as the PDP8, ICL 1900 and IBM mainframes employed 12bit, 24bit or 36bit 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 four, eight or twelve digits could concisely display an entire machine word. It also cut costs by allowing Nixie tubes, sevensegment 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 64bit words, further divided into eightbit bytes. On such systems three octal digits per byte would be required, with the most significant octal digit representing two binary digits (plus one bit of the next significant byte, if any). Octal representation of a 16bit word requires 6 digits, but the most significant octal digit represents (quite inelegantly) only one bit (0 or 1). 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 poweroftwo word size still have instruction subwords that are more easily understood if displayed in octal; this includes the PDP11 and Motorola 68000 family. The modernday 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 (see chmod). It has the advantage of not requiring any extra symbols as digits (the hexadecimal system is base16 and therefore needs six additional symbols beyond 0–9). 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, or the digit–letter combination 0o. In Motorola convention, octal numbers are prefixed with @, whereas a small letter o is added as a postfix following the Intel convention. DRDOS DEBUG uses \ to prefix octal numbers.
For example, the literal 73 (base 8) might be represented as 073, o73, q73, 0o73, \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 C language; it is supported by Haskell,^{[10]} OCaml,^{[11]} Perl 6,^{[12]} Python as of version 3.0,^{[13]} Ruby,^{[14]} Tcl as of version 9,^{[15]} and it is intended to be supported by ECMAScript 6^{[16]} (the prefix 0 has been discouraged in ECMAScript 3 and dropped in ECMAScript 5^{[17]}).
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, nongraphical, having special meaning in current context or otherwise undesired) have to be to escaped as \nnn. Octal representation of nonASCII bytes may be particularly handy with UTF8, where any start byte has octal value \3nn and any continuation byte has octal value \2nn.
To convert integer decimals to octal, divide the original number by the largest possible power of 8 and successively 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 125_{10} to octal:
Therefore, 125_{10} = 175_{8}.
Another example:
Therefore, 900_{10} = 1604_{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.1640625_{10} = 0.124_{8}.
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.
To convert a number k to decimal, use the formula that defines its base8 representation:
In this formula, a_{i} is an individual octal digit being converted, where i is the position of the digit (counting from 0 for the rightmost digit).
Example: Convert 764_{8} to decimal:
For doubledigit octal numbers this method amounts to multiplying the lead digit by 8 and adding the second digit to get the total.
Example: 65_{8} = 6 × 8 + 5 = 53_{10}
To convert octal to binary, replace each octal digit by its binary representation.
Example: Convert 51_{8} to binary:
Therefore, 51_{8} = 101 001_{2}.
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 0s (or trailing zeros 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, 1010111100_{2} = 1274_{8}.
Convert binary 11100.01001 to octal:
011  100  .  010  010 
3  4  .  2  2 
Therefore, 11100.01001_{2} = 34.22_{8}.
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:
1  0  5  7 
001  000  101  111 
0010  0010  1111 
2  2  F 
Therefore, 1057_{8} = 22F_{16}.
Hexadecimal to octal conversion proceeds by first converting the hexadecimal digits to 4bit binary values, then regrouping the binary bits into 3bit octal digits.
For example, to convert 3FA5_{16}:
3  F  A  5 
0011  1111  1010  0101 
0  011  111  110  100  101 
0  3  7  6  4  5 
Therefore, 3FA5_{16} = 37645_{8}.