Octal
Encyclopedia
The octal numeral system
, or oct for short, is the base
-8 number system, and uses the digits 0 to 7. 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 decimal systems each decimal place is a base of 10. For example:
In octal numerals each place is a power with base 8. 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.
Octal is sometimes used in computing
instead of hexadecimal
.
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.
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, which has not been published: "En ny räknekonst som omväxlas vid talet 8 istället för det vanliga vid talet 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.
, 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 base-16 and therefore needs six additional symbols beyond 0–9). It is also used for digital displays.
At the time when octal originally became widely used in computing, systems such as the PDP-8
, ICL 1900
and IBM mainframe
s employed 12-bit, 24-bit or 36-bit words. Octal was an ideal abbreviation of binary for these machines because eight (or twelve) digits could concisely display an entire machine word (each octal digit covering three binary digits). It also cut costs by allowing Nixie tube
s, seven-segment display
s, and calculator
s 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 eight-bit 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 16-bit 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 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.
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. For example, the literal 73 (base 8) might be represented as 073, o73, q73, or 0o73 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
.
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 of non-ASCII bytes may be particularly handy with UTF-8
, where any start byte has octal value \3nn and any continuation byte has octal value \2nn.
For example, to convert 12510 to octal:
Therefore, 12510 = 1758.
Another example:
Therefore, 90010 = 16048.
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.
In this formula, ai is an individual octal digit being converted, where i is the number of the digit (counting from 0 for the right-most 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 = 6x8 + 5 = 5310
Example: Convert 518 to binary:
Therefore, 518 = 101 0012.
For instance, convert binary 1010111100 to octal:
Therefore, 10101111002 = 12748.
Convert binary 11100.01001 to octal:
Therefore, 11100.010012 = 34.228.
For instance, convert octal 1057 to hexadecimal:
Therefore, 10578 = 22F16.
4516 -> octal8
First convert the hexadecimal number to binary.
4 5 1 6
8421 8421 8421 8421
↓ ↓ ↓ ↓
0100 0101 0001 0110
Now make groups of 3 digits and then convert to octal.
000 100 010 100 010 110
421 421 421 421 421 421
0 4 2 4 2 6
(4516)16 -> (042426)8
Numeral system
A numeral system is a writing system for expressing numbers, that is a mathematical notation for representing numbers of a given set, using graphemes or symbols in a consistent manner....
, or oct for short, is the base
Radix
In mathematical numeral systems, the base or radix for the simplest case is the number of unique digits, including zero, that a positional numeral system uses to represent numbers. For example, for the decimal system the radix is ten, because it uses the ten digits from 0 through 9.In any numeral...
-8 number system, and uses the digits 0 to 7. Numerals can be made from binary
Binary numeral system
The binary numeral system, or base-2 number system, represents numeric values using two symbols, 0 and 1. More specifically, the usual base-2 system is a positional notation with a radix of 2...
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 decimal systems each decimal place is a base of 10. For example:
In octal numerals each place is a power with base 8. 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.
Octal is sometimes used in computing
Computing
Computing is usually defined as the activity of using and improving computer hardware and software. It is the computer-specific part of information technology...
instead of hexadecimal
Hexadecimal
In mathematics and computer science, hexadecimal is a positional numeral system with a radix, or base, of 16. It uses sixteen distinct symbols, most often the symbols 0–9 to represent values zero to nine, and A, B, C, D, E, F to represent values ten to fifteen...
.
By Native Americans
The YukiYuki tribe
The Yuki are a Native American people from the zone of Round Valley, in what today is part of the territory of Mendocino County, Northern California. Yuki tribes are thought to have settled as far south as Hood Mountain in present-day Sonoma County...
language in California
California
California is a state located on the West Coast of the United States. It is by far the most populous U.S. state, and the third-largest by land area...
and the Pamean languages in Mexico
Mexico
The United Mexican States , commonly known as Mexico , is a federal constitutional republic in North America. It is bordered on the north by the United States; on the south and west by the Pacific Ocean; on the southeast by Guatemala, Belize, and the Caribbean Sea; and on the east by the Gulf of...
have octal systems because the speakers count using the spaces between their fingers rather than the fingers themselves.
In Europe
In 1716 King Charles XII of SwedenCharles XII of Sweden
Charles XII also Carl of Sweden, , Latinized to Carolus Rex, Turkish: Demirbaş Şarl, also known as Charles the Habitué was the King of the Swedish Empire from 1697 to 1718...
asked Emanuel Swedenborg
Emanuel Swedenborg
was a Swedish scientist, philosopher, and theologian. He has been termed a Christian mystic by some sources, including the Encyclopædia Britannica online version, and the Encyclopedia of Religion , which starts its article with the description that he was a "Swedish scientist and mystic." Others...
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, which has not been published: "En ny räknekonst som omväxlas vid talet 8 istället för det vanliga vid talet 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.
In computers
Octal is sometimes used in computing instead of hexadecimalHexadecimal
In mathematics and computer science, hexadecimal is a positional numeral system with a radix, or base, of 16. It uses sixteen distinct symbols, most often the symbols 0–9 to represent values zero to nine, and A, B, C, D, E, F to represent values ten to fifteen...
, perhaps most often in modern times in conjunction with file permissions under Unix
Unix
Unix is a multitasking, multi-user computer operating system originally developed in 1969 by a group of AT&T employees at Bell Labs, including Ken Thompson, Dennis Ritchie, Brian Kernighan, Douglas McIlroy, and Joe Ossanna...
systems (see chmod
Chmod
The chmod command is a Unix command that lets a user tell the system how much access it should permit to a file. It changes the file system modes of files and directories. The modes include permissions and special modes...
). 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). It is also used for digital displays.
At the time when octal originally became widely used in computing, systems such as the PDP-8
PDP-8
The 12-bit PDP-8 was the first successful commercial minicomputer, produced by Digital Equipment Corporation in the 1960s. DEC introduced it on 22 March 1965, and sold more than 50,000 systems, the most of any computer up to that date. It was the first widely sold computer in the DEC PDP series of...
, ICL 1900
ICT 1900 series
ICT 1900 was the name given to a series of mainframe computers released by International Computers and Tabulators and later International Computers Limited during the 1960s and '70s...
and IBM mainframe
IBM mainframe
IBM mainframes are large computer systems produced by IBM from 1952 to the present. During the 1960s and 1970s, the term mainframe computer was almost synonymous with IBM products due to their marketshare...
s employed 12-bit, 24-bit or 36-bit words. Octal was an ideal abbreviation of binary for these machines because eight (or twelve) digits could concisely display an entire machine word (each octal digit covering three binary digits). It also cut costs by allowing Nixie tube
Nixie tube
A nixie tube is an electronic device for displaying numerals or other information. The glass tube contains a wire-mesh anode and multiple cathodes. In most tubes, the cathodes are shaped like numerals. Applying power to one cathode surrounds it with an orange glow discharge...
s, seven-segment display
Seven-segment display
A seven-segment display , or seven-segment indicator, is a form of electronic display device for displaying decimal numerals that is an alternative to the more complex dot-matrix displays...
s, and calculator
Calculator
An electronic calculator is a small, portable, usually inexpensive electronic device used to perform the basic operations of arithmetic. Modern calculators are more portable than most computers, though most PDAs are comparable in size to handheld calculators.The first solid-state electronic...
s 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 eight-bit bytes
Octet (computing)
An octet is a unit of digital information in computing and telecommunications that consists of eight bits. The term is often used when the term byte might be ambiguous, as there is no standard for the size of the byte.-Overview:...
. 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 16-bit 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 power-of-two word size still have instruction subwords that are more easily understood if displayed in octal; this includes the PDP-11
PDP-11
The PDP-11 was a series of 16-bit minicomputers sold by Digital Equipment Corporation from 1970 into the 1990s, one of a succession of products in the PDP series. The PDP-11 replaced the PDP-8 in many real-time applications, although both product lines lived in parallel for more than 10 years...
and Motorola 68000 family. The modern-day ubiquitous x86 architecture
X86 architecture
The term x86 refers to a family of instruction set architectures based on the Intel 8086 CPU. The 8086 was launched in 1978 as a fully 16-bit extension of Intel's 8-bit based 8080 microprocessor and also introduced segmentation to overcome the 16-bit addressing barrier of such designs...
belongs to this category as well, but octal is rarely used on this platform.
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. For example, the literal 73 (base 8) might be represented as 073, o73, q73, or 0o73 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
C (programming language)
C is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system....
.
Octal numbers that are used in some programming languages (C, Perl
Perl
Perl is a high-level, general-purpose, interpreted, dynamic programming language. Perl was originally developed by Larry Wall in 1987 as a general-purpose Unix scripting language to make report processing easier. Since then, it has undergone many changes and revisions and become widely popular...
, PostScript
PostScript
PostScript is a dynamically typed concatenative programming language created by John Warnock and Charles Geschke in 1982. It is best known for its use as a page description language in the electronic and desktop publishing areas. Adobe PostScript 3 is also the worldwide printing and imaging...
…) 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
Escape character
In computing and telecommunication, an escape character is a character which invokes an alternative interpretation on subsequent characters in a character sequence. An escape character is a particular case of metacharacters...
as \nnn. Octal representation of non-ASCII bytes may be particularly handy with UTF-8
UTF-8
UTF-8 is a multibyte character encoding for Unicode. Like UTF-16 and UTF-32, UTF-8 can represent every character in the Unicode character set. Unlike them, it is backward-compatible with ASCII and avoids the complications of endianness and byte order marks...
, where any start byte has octal value \3nn and any continuation byte has octal value \2nn.
Method of successive division by 8
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 12510 to octal:
- 125 / 8^2 = 1
- 125 − ((8^2)*1) = 61
- 61 / 8^1 = 7
- 61 − ((8^1)*7) = 5
Therefore, 12510 = 1758.
Another example:
- 900 / 8^3 = 1
- 900 − ((8^3)*1) = 388
- 388 / 8^2 = 6
- 388 − ((8^2)*6) = 4
- 4 / 8^1 = 0
- 4 − ((8^1)*0) = 4
- 4 / 8^0 = 4
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 x 8 = 1.3125 = 1 + 0.3125
- 0.3125 x 8 = 2.5 = 2 + 0.5
- 0.5 x 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.
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 number of the digit (counting from 0 for the right-most digit).
Example: Convert 7648 to decimal:
- 7648 = 7 x 8² + 6 x 8¹ + 4 x 8° = 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 = 6x8 + 5 = 5310
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 decimal point 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, 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
hexadecimal16 -> octal84516 -> octal8
First convert the hexadecimal number to binary.
4 5 1 6
8421 8421 8421 8421
↓ ↓ ↓ ↓
0100 0101 0001 0110
Now make groups of 3 digits and then convert to octal.
000 100 010 100 010 110
421 421 421 421 421 421
0 4 2 4 2 6
(4516)16 -> (042426)8
See also
- Computer numbering formatsComputer numbering formatsA computer number format is the internal representation of numeric values in digital computer and calculator hardware and software.-Bits:The concept of a bit can be understood as a value of either 1 or 0, on or off, yes or no, true or false, or encoded by a switch or toggle of some kind...
- Octal games, a game numbering system used in Combinatorial game theoryCombinatorial game theoryCombinatorial game theory is a branch of applied mathematics and theoretical computer science that studies sequential games with perfect information, that is, two-player games which have a position in which the players take turns changing in defined ways or moves to achieve a defined winning...
.
External links
- Online Converter for Decimal/Octal Numerals (JavaScriptJavaScriptJavaScript is a prototype-based scripting language that is dynamic, weakly typed and has first-class functions. It is a multi-paradigm language, supporting object-oriented, imperative, and functional programming styles....
, GPL) - Octomatics is a numeral systemNumeral systemA numeral system is a writing system for expressing numbers, that is a mathematical notation for representing numbers of a given set, using graphemes or symbols in a consistent manner....
enabling simple visual calculation in octal.