Chapter 24: Binary Numbers
Part 1: What Are Binary Numbers?
Binary numbers are numbers expressed in the base-2 numeral system. Unlike our everyday decimal system (base-10), which uses ten digits (0-9), binary uses only two digits: 0 and 1.
Why only two digits? Because computers are made of millions of tiny electronic switches called transistors. These switches can only be in one of two states:
-
OFF (representing 0)
-
ON (representing 1)
This simple on/off system is incredibly reliable and forms the foundation of all digital computing.
Part 2: Understanding Place Value in Binary
In our familiar decimal system, each digit’s place value is a power of 10:
-
3,472 means (3 × 10³) + (4 × 10²) + (7 × 10¹) + (2 × 10⁰)
In binary, each digit’s place value is a power of 2:
-
The rightmost digit (least significant bit) is the 1’s place (2⁰)
-
The next digit is the 2’s place (2¹)
-
Then the 4’s place (2²)
-
Then the 8’s place (2³)
-
And so on…
Let’s look at the place values for an 8-bit binary number (a byte):
| Bit Position | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Place Value | 2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |
| Decimal Value | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Part 3: Converting Binary to Decimal
To convert a binary number to decimal, simply add up the place values wherever there’s a 1.
Example 1: Convert binary 1011 to decimal.
| Binary | 1 | 0 | 1 | 1 |
|---|---|---|---|---|
| Place Value | 2³ = 8 | 2² = 4 | 2¹ = 2 | 2⁰ = 1 |
| Contribution | 8 | 0 | 2 | 1 |
Total: 8 + 0 + 2 + 1 = 11
So binary 1011 = decimal 11.
Example 2: Convert binary 11010 to decimal.
| Binary | 1 | 1 | 0 | 1 | 0 |
|---|---|---|---|---|---|
| Place Value | 2⁴ = 16 | 2³ = 8 | 2² = 4 | 2¹ = 2 | 2⁰ = 1 |
| Contribution | 16 | 8 | 0 | 2 | 0 |
Total: 16 + 8 + 0 + 2 + 0 = 26
So binary 11010 = decimal 26.
In Python:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token comment"># Python makes binary easy with the 0b prefix</span> binary_num <span class="token operator">=</span> <span class="token number">0b1011</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"0b1011 in decimal is: </span><span class="token interpolation"><span class="token punctuation">{</span>binary_num<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># 11</span> binary_num <span class="token operator">=</span> <span class="token number">0b11010</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"0b11010 in decimal is: </span><span class="token interpolation"><span class="token punctuation">{</span>binary_num<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># 26</span> <span class="token comment"># You can also use int() with base 2</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">(</span><span class="token string">"1011"</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 11</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">(</span><span class="token string">"11010"</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># 26</span> |
Part 4: Converting Decimal to Binary
To convert a decimal number to binary, repeatedly divide by 2 and collect the remainders from bottom to top.
Example: Convert decimal 25 to binary.
| Division | Quotient | Remainder |
|---|---|---|
| 25 ÷ 2 | 12 | 1 (least significant bit) |
| 12 ÷ 2 | 6 | 0 |
| 6 ÷ 2 | 3 | 0 |
| 3 ÷ 2 | 1 | 1 |
| 1 ÷ 2 | 0 | 1 (most significant bit) |
Reading the remainders from bottom to top: 11001
So decimal 25 = binary 11001.
Let’s verify: (1 × 16) + (1 × 8) + (0 × 4) + (0 × 2) + (1 × 1) = 16 + 8 + 0 + 0 + 1 = 25 ✓
In Python:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
decimal_num <span class="token operator">=</span> <span class="token number">25</span> binary_representation <span class="token operator">=</span> <span class="token builtin">bin</span><span class="token punctuation">(</span>decimal_num<span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>decimal_num<span class="token punctuation">}</span></span><span class="token string"> in binary is: </span><span class="token interpolation"><span class="token punctuation">{</span>binary_representation<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># 0b11001</span> <span class="token comment"># Without the '0b' prefix</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>decimal_num<span class="token punctuation">}</span></span><span class="token string"> in binary is: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>decimal_num<span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">:</span><span class="token format-spec">]</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># 11001</span> <span class="token comment"># Using format() for more control</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>decimal_num<span class="token punctuation">}</span></span><span class="token string"> in binary (8 bits): </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">format</span><span class="token punctuation">(</span>decimal_num<span class="token punctuation">,</span> <span class="token string">'08b'</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># 00011001</span> |
Part 5: Binary Addition
Adding binary numbers is similar to decimal addition, but you carry over when you reach 2 instead of 10.
Rules of binary addition:
-
0 + 0 = 0
-
0 + 1 = 1
-
1 + 0 = 1
-
1 + 1 = 0, carry 1 (since 2 in binary is 10)
-
1 + 1 + 1 = 1, carry 1 (since 3 in binary is 11)
Example: Add binary 1011 (11) and 1101 (13).
|
0 1 2 3 4 5 6 7 8 |
1 0 1 1 (11) + 1 1 0 1 (13) --------- |
Let’s add from right to left:
-
Rightmost column: 1 + 1 = 0, carry 1
-
Next column: 1 (carry) + 1 + 0 = 0, carry 1
-
Next column: 1 (carry) + 0 + 1 = 0, carry 1
-
Leftmost column: 1 (carry) + 1 + 1 = 1, carry 1
-
Final carry: 1
Result: 11000 (which is 24)
|
0 1 2 3 4 5 6 7 8 9 |
1 0 1 1 + 1 1 0 1 --------- 1 1 0 0 0 (24) |
In Python:
|
0 1 2 3 4 5 6 7 8 9 |
a <span class="token operator">=</span> <span class="token number">0b1011</span> b <span class="token operator">=</span> <span class="token number">0b1101</span> result <span class="token operator">=</span> a <span class="token operator">+</span> b <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> + </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> = </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span>result<span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span> |
Part 6: Binary Subtraction
Binary subtraction uses borrowing, similar to decimal subtraction.
Rules:
-
0 – 0 = 0
-
1 – 0 = 1
-
1 – 1 = 0
-
0 – 1 = 1, borrow 1 from the next column
Example: Subtract binary 101 (5) from 1001 (9).
|
0 1 2 3 4 5 6 7 8 |
1 0 0 1 (9) - 1 0 1 (5) --------- |
-
Rightmost: 1 – 1 = 0
-
Next column: 0 – 0 = 0
-
Next column: 0 – 1 → need to borrow. Borrow from the leftmost 1, making it 0, and this column becomes 10 (2 in decimal). 10 – 1 = 1
-
Leftmost: 0 (after borrowing) – 0 = 0
Result: 0100 (which is 4)
|
0 1 2 3 4 5 6 7 8 9 |
1 0 0 1 - 1 0 1 --------- 0 1 0 0 (4) |
Part 7: Binary in Programming
Representing Binary in Code
Most programming languages have a way to write binary literals directly:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="token comment"># Python (using 0b prefix)</span> a <span class="token operator">=</span> <span class="token number">0b1010</span> <span class="token comment"># 10 in decimal</span> b <span class="token operator">=</span> <span class="token number">0b1111</span> <span class="token comment"># 15 in decimal</span> <span class="token keyword">print</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token comment"># JavaScript (ES6+)</span> <span class="token comment"># let a = 0b1010; // 10</span> <span class="token comment"># let b = 0b1111; // 15</span> <span class="token comment"># C/Java (some versions)</span> <span class="token comment"># int a = 0b1010; // 10</span> |
Common Binary Operations
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="token comment"># Bitwise operations work directly on binary representations</span> x <span class="token operator">=</span> <span class="token number">0b1100</span> <span class="token comment"># 12</span> y <span class="token operator">=</span> <span class="token number">0b1010</span> <span class="token comment"># 10</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"x = </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span>x<span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"y = </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>y<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span>y<span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"x & y (AND) = </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>x <span class="token operator">&</span> y<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span>x <span class="token operator">&</span> y<span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span> <span class="token comment"># 1000 (8)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"x | y (OR) = </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>x <span class="token operator">|</span> y<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span>x <span class="token operator">|</span> y<span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span> <span class="token comment"># 1110 (14)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"x ^ y (XOR) = </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>x <span class="token operator">^</span> y<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span>x <span class="token operator">^</span> y<span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span> <span class="token comment"># 0110 (6)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"~x (NOT) = </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token operator">~</span>x<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># -13 (two's complement)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"x << 1 (left shift) = </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>x <span class="token operator"><<</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span>x <span class="token operator"><<</span> <span class="token number">1</span><span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span> <span class="token comment"># 11000 (24)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"x >> 1 (right shift) = </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>x <span class="token operator">>></span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span>x <span class="token operator">>></span> <span class="token number">1</span><span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span> <span class="token comment"># 0110 (6)</span> |
Part 8: Practical Applications of Binary
1. Bit Flags (Permissions)
Binary is perfect for representing sets of true/false flags. Each bit can represent a single permission.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="token comment"># Define permissions as bit masks</span> READ <span class="token operator">=</span> <span class="token number">0b100</span> <span class="token comment"># 4</span> WRITE <span class="token operator">=</span> <span class="token number">0b010</span> <span class="token comment"># 2</span> EXECUTE <span class="token operator">=</span> <span class="token number">0b001</span> <span class="token comment"># 1</span> <span class="token comment"># Combine permissions using OR</span> user_perms <span class="token operator">=</span> READ <span class="token operator">|</span> WRITE <span class="token comment"># 110 (6)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"User permissions: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>user_perms<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Check if user has a specific permission using AND</span> can_read <span class="token operator">=</span> user_perms <span class="token operator">&</span> READ can_write <span class="token operator">=</span> user_perms <span class="token operator">&</span> WRITE can_execute <span class="token operator">=</span> user_perms <span class="token operator">&</span> EXECUTE <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can read? </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bool</span><span class="token punctuation">(</span>can_read<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can write? </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bool</span><span class="token punctuation">(</span>can_write<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can execute? </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bool</span><span class="token punctuation">(</span>can_execute<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
2. Color Representation
In web development, colors are often represented in hexadecimal (base-16), which is closely related to binary.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="token comment"># A color in hex: #FFA500 (orange)</span> <span class="token comment"># FF = 255, A5 = 165, 00 = 0</span> <span class="token comment"># In binary, this is:</span> <span class="token comment"># Red: 11111111</span> <span class="token comment"># Green: 10100101</span> <span class="token comment"># Blue: 00000000</span> <span class="token comment"># Pack RGB values into a single integer</span> <span class="token keyword">def</span> <span class="token function">rgb_to_int</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token punctuation">(</span>r <span class="token operator"><<</span> <span class="token number">16</span><span class="token punctuation">)</span> <span class="token operator">|</span> <span class="token punctuation">(</span>g <span class="token operator"><<</span> <span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">|</span> b color <span class="token operator">=</span> rgb_to_int<span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">165</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Packed color: </span><span class="token interpolation"><span class="token punctuation">{</span>color<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"In hex: #</span><span class="token interpolation"><span class="token punctuation">{</span>color<span class="token punctuation">:</span><span class="token format-spec">06X</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
3. Checking if a Number is Even or Odd
The fastest way to check if a number is even or odd is to look at its least significant bit (the rightmost bit).
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token keyword">def</span> <span class="token function">is_even</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token punctuation">(</span>n <span class="token operator">&</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span> <span class="token keyword">def</span> <span class="token function">is_odd</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token punctuation">(</span>n <span class="token operator">&</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"5 is even? </span><span class="token interpolation"><span class="token punctuation">{</span>is_even<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># False</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"5 is odd? </span><span class="token interpolation"><span class="token punctuation">{</span>is_odd<span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># True</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"6 is even? </span><span class="token interpolation"><span class="token punctuation">{</span>is_even<span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># True</span> |
4. Multiplying and Dividing by Powers of 2
Left shift (<<) multiplies by 2; right shift (>>) divides by 2 (floor division).
|
0 1 2 3 4 5 6 7 8 9 10 |
x <span class="token operator">=</span> <span class="token number">7</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>x<span class="token punctuation">}</span></span><span class="token string"> << 1 = </span><span class="token interpolation"><span class="token punctuation">{</span>x <span class="token operator"><<</span> <span class="token number">1</span><span class="token punctuation">}</span></span><span class="token string"> (multiply by 2)"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>x<span class="token punctuation">}</span></span><span class="token string"> << 2 = </span><span class="token interpolation"><span class="token punctuation">{</span>x <span class="token operator"><<</span> <span class="token number">2</span><span class="token punctuation">}</span></span><span class="token string"> (multiply by 4)"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>x<span class="token punctuation">}</span></span><span class="token string"> >> 1 = </span><span class="token interpolation"><span class="token punctuation">{</span>x <span class="token operator">>></span> <span class="token number">1</span><span class="token punctuation">}</span></span><span class="token string"> (divide by 2)"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>x<span class="token punctuation">}</span></span><span class="token string"> >> 2 = </span><span class="token interpolation"><span class="token punctuation">{</span>x <span class="token operator">>></span> <span class="token number">2</span><span class="token punctuation">}</span></span><span class="token string"> (divide by 4)"</span></span><span class="token punctuation">)</span> |
Part 9: Hexadecimal and Octal
Binary numbers can get very long and hard to read. Programmers often use hexadecimal (base-16) and octal (base-8) as shorthand.
Hexadecimal (Base-16)
Uses digits 0-9 and letters A-F (where A=10, B=11, C=12, D=13, E=14, F=15).
-
One hexadecimal digit represents exactly 4 binary digits (a nibble).
-
0xFFis 255 in decimal,11111111in binary. -
0xA5is 165 in decimal,10100101in binary.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token comment"># Python uses 0x prefix for hexadecimal</span> hex_num <span class="token operator">=</span> <span class="token number">0xFF</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"0xFF in decimal: </span><span class="token interpolation"><span class="token punctuation">{</span>hex_num<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"0xFF in binary: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>hex_num<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Convert decimal to hex</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"255 in hex: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">hex</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"255 in hex (without prefix): </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">format</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">,</span> <span class="token string">'X'</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Octal (Base-8)
Uses digits 0-7. Each octal digit represents 3 binary digits.
|
0 1 2 3 4 5 6 7 8 9 |
<span class="token comment"># Python uses 0o prefix for octal</span> octal_num <span class="token operator">=</span> <span class="token number">0o77</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"0o77 in decimal: </span><span class="token interpolation"><span class="token punctuation">{</span>octal_num<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"0o77 in binary: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span>octal_num<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Summary: The Binary Philosophy
-
Binary is a base-2 number system using only 0 and 1.
-
It’s the native language of computers because they’re built from two-state electronic switches.
-
Each binary digit is a bit.
-
Place values in binary are powers of 2 (1, 2, 4, 8, 16, 32, 64, 128…).
-
Converting binary to decimal: add place values where bits are 1.
-
Converting decimal to binary: repeatedly divide by 2 and read remainders upward.
-
Binary arithmetic (addition, subtraction) works like decimal but with carries at 2.
-
Bitwise operators (
&,|,^,~,<<,>>) manipulate individual bits. -
Hexadecimal (base-16) and octal (base-8) are convenient shorthand for binary.
Understanding binary is like learning the alphabet of the digital world. It’s the foundation upon which all of computing is built. Once you grasp how computers see numbers, you’ll have a much deeper appreciation for how they handle everything else—text, images, sound, and more.
