# Computer Number Systems

All digital computers – from supercomputers to your smartphone – ultimately can do one thing: detect whether an electrical signal is on or off.
That basic information, called a *bit* (**bi**nary digi**t**), has two values: a 1 (or *true*) when the signal is on, and a 0 (of *false*) when the signal is off. Larger values can be stored by a group of bits. For example, 3 bits together can take on 8 different values.

Computer scientists use the binary number system (that is, base 2) to represent the values of bits. Proficiency in the binary number system is essential to understanding how how numbers and information is represented in a computer. Since binary numbers representing moderate values quickly become rather lengthy, bases eight (octal) and sixteen (hexadecimal) are frequently used as shorthand.

In this category, we will focus on conversion between binary, octal, decimal, and hexadecimal numbers. There may be some arithmetic in these bases, and occasionally a number with a fractional part. We will not cover how negative numbers are represented in binary.

## Basics

The binary number system consists of two symbols, 0 and 1. The value of a binary number is found by looking at the bit in each position and multiplying it by the value of that position.

For example, the binary number 101011 has a decimal value of $1 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 + 0 \cdot 2^2 + 1\cdot 2^1 + 1 \cdot 2^0 = 32+ 0+8 + 0 +2 + 1 = 43$.

The binary number 101111010000110 has a decimal value of 24,198.

The decimal number of 24,198 is the binary number 101111010000110.

Each group of 4 bits has 16 different values: 0 through 15. For example, 1011 has a decimal value of $1\cdot 2^3 + 0\cdot 2^2 + 1 \cdot 2^1 + 1 \cdot 2^0 = 8+0+2+1 = 11$.

Large numbers quickly become quite cumbersome to deal with in binary (for example, a value of 1 million is a binary number that is 20 bits in length), so each group of 4 bits can be represented by a base 16 digits, 0, 1, 2, 3, 4, 5, 6, 7, 8 9, A, B, C, D, E, or F.

For example, the binary number 101111010000110 can be written as 101 1110 1000 0110, which 101 1110 1000 0110

1 x 2^$101101_2$ (the subscript is optional, if the context makes it clear that for example 1011 and 10110. The value of a binary number is found by Often, we'll use a subscript of *2* to be explicit that the number is in base 2.
. Octal numbers group binary numbers in bunches of 3 digits and convert the triplet to a single digit between 0 and 7, inclusive.

For example, 10010101102 = 001 001 010 1102 = 11268.

This is because 8 = 23 and the value of three bits 111 = 1 + 2 + 4 = 7 using powers of 2.

Hexadecimal numbers group binary numbers by fours, and convert the quadruplet to a single digit in the range 0, 1, 2 …, 9, A, B, C, D, E, F. The digits A through F have decimal values of 10 through 15 respectively. This is because 16 = 24 and the value of four bits 1111 = 1 + 2 + 4 + 8 = 15 using powers of 2.

For example, 101101101001012 = 0010 1101 1010 01012 = 2DA516.

All of the basic rules of number theory apply to every base, but these three bases 2, 8, and 16 are uniquely suited for computer science.

Therefore, converting from any base to base 10 involves multiplying each digit by an increasing power of that base.

For example, 457_8 = 7 x 8^0 + 5 x 8^1 + 4 x 8^2 = 7 + 40 + 256 = 30310.

Converting from base 10 to any other base involves finding how many times each decreasing power of that base can be divided evenly into the number and repeating the process with the remainder. For example, 50010 = 256 x 1 + 16 x 15 + 1 x 4 = 1F416. Another way to accomplish this is to repeatedly divide the number by the base as follows:

Therefore, reading the remainders from bottom to top give you 1F416.

Adding in bases other than 10 means that you must carry the value of that base and subtracting in bases other than 10 means that you must borrow the value of that base if necessary. For example:

since D=13 and 13+3=16 so leave the 0 and carry the 16 as a 1. Then E=14 and A=10 so 1+14+10 = 25 so leave the 9 and carry the 16 as a 1. E=14 so 1+14+9=24 so leave the 8 and carry the 16 as 1. Finally, F=15 so 1+15=16 which is 10.

Subtracting in base 8 is as follows:

Borrow 1=8 from the 7 since 2+8-6=4. Therefore, 6–5=1. Then, borrow 1=8 from the 4 since 5+8–7=6. Then the last digit on the left is a 3.

## Format of Problems

The key here is to convert between hexadecimal (base 16) and octal (base 8); using the binary representation is often easier than going through base 10. Some problems require simple arithmetic in hexadecimal and octal, and once in a while you’ll see of “decimal point”.

Facts you must know cold:

- The values of hex digits A, B, C, D, E, F
- Powers of 2, up to, say, 4096
- Powers of 8, up to say, 4096
- Powers of 16, up to say, 65,536
- .Convert from base 16 to base 2, and vice versa
- Convert from base 8 to base 2, and vice versa
- Convert between octal and hex, via base 2

## External Resources

This Binary tutorial is divided into 3 sections. In general I recommend you work through them in order but if you've come here just to learn about a specific topic then who am I to slow you down, just head straight on over.

Number Systems - Read on below to discover the theory behind numbers. Conversions - How to convert between binary and decimal, hexadecimal and octal. Arithmetic - Learn how to perform various arithmetic operations with binary numbers. Negative Numbers - Learn how to manage negative numbers in binary. Floating point and fractions - Learn how to convert decimal numbers to and from binary fractions and floating point.

Binary Tutorial - 1. Number Systems https://ryanstutorials.net/binary-tutorial/

https://ryanstutorials.net/binary-tutorial/binary-conversions.php
Binary Tutorial - 2. Binary Conversions

Binary Tutorial - 3. Binary Arithmetic https://ryanstutorials.net/binary-tutorial/binary-arithmetic.php

Binary Tutorial - 5. Binary Fractions and Floating Point https://ryanstutorials.net/binary-tutorial/binary-floating-point.php

### test

fooo