In this tutorial, we are going to learn about the various number systems.

## Introduction:

In computers, we normally use four different numbering systems – **Decimal, Binary, Octal, and Hexadecimal.**

The **decimal system** is a number system that is used in our day-to-day applications like business, etc. In this system the symbols 0,1,2,3,4,5,6,7,8,9 are used to denote various numbers.

In the **binary number system**, **0’s** and **1’s** are the only symbols that are used to represent numbers of all magnitudes. For example, a normal decimal number** 7 (seven)** is represented in binary as **111**. The binary system is mostly used in computers and other computing devices.

A number in a particular base is written as **(Number) _{base}**. For example,

**(17)**is a decimal number (Seventeen), and

_{10}**(10001)**is a binary number 10001 which actually represents a decimal number whose value is

_{2}**17**.

Since the decimal number system is more commonly used the** decimal number (35) _{10}** is simply written as 35. However, if the same number has to be represented in the

**binary**system, it is written as

**(100011)**.

_{2}Similarly, the **octal** number system uses **8** as its base. It is generally used to display digits and in representing file permissions under UNIX/Linux Operating Systems.

**Hexadecimal** system or **Hex** is a number system that uses **16** as a base to represent numbers.

## 1. Decimal Numbers:

The numbers that we use daily belong to the **Decimal System**. For example, 0,1,2,3,4,…..,9999,…..etc. It is also called a **base – 10 system**.

It is called the** base – 10** number system because it uses **10 unique digits** from **0 to 9** to represent any number.

A **base** (also called the **radix**) is the number of unique digits or symbols (**including 0**) that are used to represent a given number.

In a **decimal system** (where the base is 10), a total of 10 digits (0,1,2,3,4,5,6,7,8, and 9) are used to represent a number of any magnitude. For example, **One hundred and Thirty-Five** is represented as **135**, where

135 = (1 * 10

^{2}) + (3 * 10^{1}) + (5 * 10^{0})135 = (1 * 100) + (3 * 10) + (5 * 1)

In a similar way, fractions are represented with base – 10 being raised to a negative power.

## 2. Binary Numbers:

The **binary number system** is used both in mathematics and digital electronics. **The binary number system** or **base – 2 numeral system** represents numeric values using only two symbols – **Zero (0)** and **One (1)**.

Computers have circuits (logic gates) that can be either of the two states: **OFF** or **ON**. These two states are represented by **Zero (0)** and **One (1)** respectively. It is for this reason that computation in systems is performed using a binary number system (base – 2) where all numbers are represented using 0’s and 1’s.

Each **binary digit**, i.e., Zero (**0**) or One (**1**) is called a **bit** (known as a * b*inary dig

*). A collection of*

**it****8**such bits is called a

**Byte**.

In computer terminology, different names have been given to multiples of **2 ^{10 }**( i.e.,

**1024**times the currently existing value ), as shown in the table given below:

In computer text, images, music, videos, or any type of data is eventually stored in binary format on the disk.

In the binary system, a total of 2 digits (0 and 1) are used to represent a number of any magnitude.

For example, **Zero** is represented as 0, where

0 = (0 * 2

^{0}) = (0 * 1)

Similarly, **One** is represented as 1, where

1 = (1 * 2

^{0}) = (1 * 1)

Now, let us represent the following numbers in binary format:

**Two **(2): Since 0 and 1 are the only digits the can be used to represent 2, let’s divide 2 by 2 write the quotient and remainder as follows:

[quotient][remainder], i.e., : [1][0]

2 = (1 * 2

^{1}) + (0 * 2^{0}) = (2) + (0)

**Three **(3): Since 0 and 1 are the only digits the can be used to represent 3, let’s divide 3 by 2 write the quotient and remainder as follows:

[quotient][remainder], i.e., : [1][1]

3 = (1 * 2

^{1}) + (1 * 2^{0}) = (2) + (1)

**Seventeen **(17): Since 0 and 1 are the only digits the can be used to represent 17, let’s divide 17 by 2 write the quotient and remainder as follows:

[quotient][remainder], i.e., :[8][1], by repeating the above logic for 8 (8 = [4][0]), 4(4 = [2][0]),2(2 = [1][0]) ,and 1(1 = [0][1]), we finally get [1][0][0][0][1].

17 = (1 * 2

^{4}) + (0 * 2^{3}) + (0 * 2^{2}) + (0 * 2^{1}) + (1 * 2^{0})17 = (16) + (0) + (0) + (0) + (1)

In **C, **binary numbers are prefixed with a leading **0b (or 0B) **(digit zero followed by char ‘b’). For example, to store a binary value of four into a variable **binary_Four,** we write

`int binary_Four = 0b100;`

## 3. Octal Numbers:

The numbering system which uses **base – 8 **is called the **Octal system. **A base (also known as radix) is the number of unique digits or symbols (including 0) that are used to represent a given number.

In the octal system (or the base – 8 system), a total of 8 digits (0, 1, 2, 3, 4, 5, 6, and 7) are used to represent a number of any size (magnitude).

For example, **Zero **is represented as **0**, where

0 = (

0* 8^{0}) = (0* 1)

Similarly, numbers 1, 2,…, and 7 are represented below:

1 = (

1* 8^{0}) = (1* 1)2 = (

2* 8^{0}) = (2* 1)……

7 = (

7* 8^{0}) = (7* 1)

Now, let us represent the following numbers in the octal system:

**Eighteen **(18): Since 0 to 7 are only digits that can be used to represent 18, let us divide 18 by 8 and write the quotient and remainder as follows:

[quotient][remainder], i.e.,:

[2][2]18 = (

2* 8^{1}) + (2* 8^{0}) = (16) + (2)

**Four Hundred and Twenty-One **(421): Since 0 to 7 are only digits that can be used to represent 421, let us divide 421 by 8 and write the quotient and remainder as follows:

[quotient][remainder], i.e.,: [52]

[5](further dividing 52 by 8 we get[6][4]), which is[6][4][5]421 = (6 * 8

^{2}) + (4 * 8^{1}) + (5 * 8^{0}) = (384) + (32) + (5)

In order to differentiate from decimal numbers, octal numbers are prefixed a leading **0** (zero).

For example, to store an octal value of seven into a variable **octal_Seven**, we write

```
int octal_Seven = 07;
```

Similarly, if we want to store an octal representation of a decimal number 9 in a variable **number_Nine, **we write

```
int number_Nine = 011;
```

The largest digit in the octal system is **(7) _{8}**. Number (7)

_{8 }in binary is represented as

**(111)**. In the binary system, three binary digits (bits) are being used to represent the highest octal digit. While converting an

_{2}**octal number**to a

**binary number**,

**three bits**are used to represent each octal digit.

The following table shows the conversion of each octal digit into its corresponding binary digits.

For example, an octal number **0246 **is converted to its corresponding binary form as

```
Octal number -> 2 4 6
Binary number -> 010 100 110
```

Hence **0246 ** is **(010100110) _{2}**.

Similarly, while converting a **binary** number into its octal form, the binary number is divided into groups of **3 digits** each, starting from the extreme right side of the given number. Each of the **three binary digits** is replaced with their corresponding **octal digits**.

If the group of binary digits to the extreme left side of the number do not have three digits, the required number of zeros are added as a prefix to get three binary digits. For example, let us convert a **binary number 1101100** into its corresponding **octal** number.

```
Binary Number -> 1 101 100
Binary Number -> 001 101 100 //After prefixing zeros on the extreme left side of the group
Octal Number -> 1 5 4
```

Hence, the octal equivalent of the given binary **1101100** is **0154**.

## 4. Hexadecimal Numbers:

The number system which uses **base – 16 **is called **hexadecimal system** or simply **hex. **A base (also known as radix) is the number of unique digits or symbols (including 0) that are used to represent a given number.

In the hexadecimal system (or **base – 16** number system), a total of 16 symbols are used. Digits from **0 (zero)** to **9 (nine)** are used to represent values from **0 to 9** respectively and alphabets **A**, **B**, **C**, **D**, **E** and **F** (or **a**, **b**, **c**, **d**, **e**, and **f**) are used to represent values from **10 to 15** respectively.

In many programming languages **0x **is used as a prefix to denote a hexadecimal representation.

For example, in the hexadecimal number system, the value of **zero** is represented as **0x0**, where

0 = (

0* 16^{0}) = (0* 1)

Similarly,

1 = (

1* 16^{0}) = (1* 1)2 = (

2* 16^{0}) = (2* 1)…..

15 =

F= (15* 16^{0}) = (15* 1)

Now, let us represent the following numbers in the hexadecimal system:

Decimal number **Eighteen (18)**:

Since one can use only **0 to 9** and alphabets **A to F** to represent 18.

Let’s divide 18 by 16 and write the quotient and remainder as follows:

[quotient][remainder], i.e.,

[1][2]18 =

0x12= (1* 16^{1}) + (2* 16^{0}) = (16) + (2)

**One Hundred and Sixty **(160).

Since one can use only **0 to 9** and alphabets **A to F** to represent 160.

Let’s divide 160 by 16 and write the quotient and remainder as follows:

[quotient][remainder], i.e., [10][0], [A][0] (since 10 is represented by A)

160 =

0xA0 =(10* 16^{1}) + (0* 16^{0}) = (160) + (0)

Note that both** uppercase** and **lowercase** letters can be used when representing hexadecimal values. For example,

`int hex_Hundred_and_Sixty = 0xA0; // or 0Xa0,however 0xA0 is preferred.`

The highest digit in hex is **(F) _{16}**. The number (F)

_{16 }in binary is represented as

**(1111)2**. Here,

**four binary digits**(bits) are used to represent the highest hexadecimal digit. In

**hex to binary**conversion,

**four bits**are used to represent each

**hex digit**.

The following table shows the conversion of each **hex digit** into its corresponding **binary digits**.

For example, hexadecimal number **0x5AF6** is converted into its corresponding binary form as follows:

```
Hex Number -> 5 A F 6
Binary Number -> 0101 1010 1111 0110
```

Hence, **0x5AF6** is **(0101101011110110) _{2}**.

Similarly while converting a binary into hex number, the binary number is the first divided into groups of 4 digits each starting from the extreme right side. Each of the four binary digits is replaced with their corresponding hex digits.

If the group to the extreme left side of **binary digits** does not have **four digits**, the required number of zeros are added as a prefix to make a group of four binary digits.

For example, let us convert the following binary **1101100** number into hex.

```
Binary Number -> 110 1100
Binary Number -> 0110 1100 //After prefixing zeros in the left-most group
Hexal number -> 6 C
```

Hence, the hex equivalent of the given binary **1101100 **is **0x6C**.

## References:

Happy Learning 🙂