Chapter 23: Bits and Bytes
Part 1: What is a Bit?
A bit (short for binary digit) is the most basic unit of information in computing. It can only have one of two possible values: 0 or 1.
Think of a bit like a simple light switch:
-
0 represents OFF, or false, or no voltage.
-
1 represents ON, or true, or voltage present.
That’s it! A single bit can only tell us one of two things. It’s not much on its own, but when you combine many bits together, they can represent incredibly complex information.
Why binary? Because computers are made of millions of tiny electronic switches (transistors). These switches can only be in one of two states: on or off. So the binary system (base-2) is a natural fit for how computers are built.
|
0 1 2 3 4 5 6 7 8 9 |
<span class="token comment"># A single bit can only be 0 or 1</span> bit1 <span class="token operator">=</span> <span class="token number">0</span> bit2 <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"A bit can be </span><span class="token interpolation"><span class="token punctuation">{</span>bit1<span class="token punctuation">}</span></span><span class="token string"> or </span><span class="token interpolation"><span class="token punctuation">{</span>bit2<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Part 2: What is a Byte?
A byte is a group of 8 bits treated as a single unit. It’s the fundamental unit of storage in most computer systems. Just as 8 bits make a byte, bytes combine to make kilobytes, megabytes, gigabytes, and so on.
|
0 1 2 3 4 5 6 7 8 |
1 byte = 8 bits Example: 1 0 1 1 0 0 1 0 ← This is one byte (8 bits) |
Why 8 bits? Historically, it was a convenient size that could represent a single character (like ‘A’ or ‘z’) and has become the standard across virtually all computer architectures.
With 8 bits, we can represent 2⁸ = 256 different values (from 0 to 255). This is enough to represent all lowercase letters, uppercase letters, digits, punctuation marks, and special characters—which brings us to character encoding.
Part 3: From Bits to Numbers
How do we represent numbers using only 0s and 1s? We use the binary number system (base-2).
In our everyday decimal system (base-10), each digit’s place value is a power of 10:
-
The number 3,472 means: (3 × 10³) + (4 × 10²) + (7 × 10¹) + (2 × 10⁰)
In binary (base-2), each digit’s place value is a power of 2:
-
The rightmost bit is the 1’s place (2⁰)
-
The next bit is the 2’s place (2¹)
-
Then the 4’s place (2²)
-
Then the 8’s place (2³)
-
And so on…
Let’s convert the binary number 1011 to decimal:
| Bit Position | 8’s place (2³) | 4’s place (2²) | 2’s place (2¹) | 1’s place (2⁰) |
|---|---|---|---|---|
| Binary | 1 | 0 | 1 | 1 |
| Value | 1 × 8 = 8 | 0 × 4 = 0 | 1 × 2 = 2 | 1 × 1 = 1 |
Total: 8 + 0 + 2 + 1 = 11
So the binary number 1011 equals the decimal number 11.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="token comment"># Python can work directly with binary numbers using the '0b' prefix</span> binary_num <span class="token operator">=</span> <span class="token number">0b1011</span> <span class="token comment"># This is binary for 11</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"># You can also use the bin() function to see binary representation</span> decimal_num <span class="token operator">=</span> <span class="token number">11</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><span class="token string">"</span></span><span class="token punctuation">)</span> |
Output:
|
0 1 2 3 4 5 6 7 |
0b1011 in decimal is: 11 11 in binary is: 0b1011 |
Part 4: From Bytes to Text (Character Encoding)
So we can represent numbers using bits and bytes. But how do we represent text? This is where character encoding comes in. The most fundamental encoding is ASCII (American Standard Code for Information Interchange).
ASCII assigns a unique number (from 0 to 127) to each character. Since 7 bits can represent 128 values (2⁷ = 128), ASCII fits comfortably in a single byte (with one bit left unused).
Let’s see how the word “Hi” is stored in a computer:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Character: H ASCII code: 72 Binary: 01001000 Character: i ASCII code: 105 Binary: 01101001 So "Hi" is stored as: 01001000 01101001 |
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token comment"># Python can show us the ASCII (or Unicode) values of characters</span> char1 <span class="token operator">=</span> <span class="token string">'H'</span> char2 <span class="token operator">=</span> <span class="token string">'i'</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>char1<span class="token punctuation">}</span></span><span class="token string">' has ASCII/Unicode value: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">ord</span><span class="token punctuation">(</span>char1<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"'</span><span class="token interpolation"><span class="token punctuation">{</span>char1<span class="token punctuation">}</span></span><span class="token string">' in binary: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span><span class="token builtin">ord</span><span class="token punctuation">(</span>char1<span class="token punctuation">)</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"'</span><span class="token interpolation"><span class="token punctuation">{</span>char2<span class="token punctuation">}</span></span><span class="token string">' has ASCII/Unicode value: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">ord</span><span class="token punctuation">(</span>char2<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"'</span><span class="token interpolation"><span class="token punctuation">{</span>char2<span class="token punctuation">}</span></span><span class="token string">' in binary: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">bin</span><span class="token punctuation">(</span><span class="token builtin">ord</span><span class="token punctuation">(</span>char2<span class="token punctuation">)</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"># And we can go back from number to character</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"The character for 72 is: '</span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">chr</span><span class="token punctuation">(</span><span class="token number">72</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"The character for 105 is: '</span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">chr</span><span class="token punctuation">(</span><span class="token number">105</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">'"</span></span><span class="token punctuation">)</span> |
Output:
|
0 1 2 3 4 5 6 7 8 9 10 11 |
'H' has ASCII/Unicode value: 72 'H' in binary: 0b1001000 'i' has ASCII/Unicode value: 105 'i' in binary: 0b1101001 The character for 72 is: 'H' The character for 105 is: 'i' |
Unicode: ASCII is limited to English characters. To represent characters from all the world’s writing systems, we have Unicode, which uses up to 4 bytes per character. UTF-8, the most common encoding, uses a variable number of bytes (1-4) per character, with the first 128 characters matching ASCII for backward compatibility.
Part 5: Units of Storage
Just as we have units like “inch,” “foot,” and “mile” for distance, we have units for digital information. Here they are, from smallest to largest:
| Unit | Abbreviation | Approximate Size | Analogy |
|---|---|---|---|
| Bit | b | 1 binary digit | A single light switch |
| Byte | B | 8 bits | A single character (like ‘A’) |
| Kilobyte | KB | 1,024 bytes | A short paragraph |
| Megabyte | MB | 1,024 KB (about 1 million bytes) | A digital photo |
| Gigabyte | GB | 1,024 MB (about 1 billion bytes) | A full-length movie |
| Terabyte | TB | 1,024 GB (about 1 trillion bytes) | A large hard drive |
| Petabyte | PB | 1,024 TB | All the data in a large data center |
Note: There’s a slight confusion in terminology. In some contexts (especially hard drive marketing), “kilobyte” means exactly 1,000 bytes. But in programming and computer science, it’s almost always 1,024 (2¹⁰) bytes. This is because computers work in powers of 2, not powers of 10.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<span class="token comment"># Converting between units</span> bytes_size <span class="token operator">=</span> <span class="token number">5</span> <span class="token operator">*</span> <span class="token number">1024</span> <span class="token operator">*</span> <span class="token number">1024</span> <span class="token comment"># 5 MB in bytes</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"5 MB is </span><span class="token interpolation"><span class="token punctuation">{</span>bytes_size<span class="token punctuation">}</span></span><span class="token string"> bytes"</span></span><span class="token punctuation">)</span> <span class="token comment"># Calculate how many 100 KB files fit in 1 GB</span> one_gb_bytes <span class="token operator">=</span> <span class="token number">1024</span> <span class="token operator">*</span> <span class="token number">1024</span> <span class="token operator">*</span> <span class="token number">1024</span> <span class="token comment"># 1 GB in bytes</span> file_size_bytes <span class="token operator">=</span> <span class="token number">100</span> <span class="token operator">*</span> <span class="token number">1024</span> <span class="token comment"># 100 KB in bytes</span> num_files <span class="token operator">=</span> one_gb_bytes <span class="token operator">//</span> file_size_bytes <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"About </span><span class="token interpolation"><span class="token punctuation">{</span>num_files<span class="token punctuation">}</span></span><span class="token string"> files of 100 KB fit in 1 GB"</span></span><span class="token punctuation">)</span> |
Part 6: Practical Examples – Seeing Bits and Bytes in Action
Example 1: How Many Values Can N Bits Represent?
The number of distinct values you can represent with N bits is 2ᴺ.
|
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">values_for_bits</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 number">2</span> <span class="token operator">**</span> n <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"1 bit can represent </span><span class="token interpolation"><span class="token punctuation">{</span>values_for_bits<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> values (0-</span><span class="token interpolation"><span class="token punctuation">{</span>values_for_bits<span class="token punctuation">(</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 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"2 bits can represent </span><span class="token interpolation"><span class="token punctuation">{</span>values_for_bits<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> values (0-</span><span class="token interpolation"><span class="token punctuation">{</span>values_for_bits<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><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 keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"4 bits can represent </span><span class="token interpolation"><span class="token punctuation">{</span>values_for_bits<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> values (0-</span><span class="token interpolation"><span class="token punctuation">{</span>values_for_bits<span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span><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 keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"8 bits (1 byte) can represent </span><span class="token interpolation"><span class="token punctuation">{</span>values_for_bits<span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> values (0-255)"</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"16 bits (2 bytes) can represent </span><span class="token interpolation"><span class="token punctuation">{</span>values_for_bits<span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">)</span><span class="token punctuation">:</span><span class="token format-spec">,</span><span class="token punctuation">}</span></span><span class="token string"> values (0-65,535)"</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"32 bits (4 bytes) can represent </span><span class="token interpolation"><span class="token punctuation">{</span>values_for_bits<span class="token punctuation">(</span><span class="token number">32</span><span class="token punctuation">)</span><span class="token punctuation">:</span><span class="token format-spec">,</span><span class="token punctuation">}</span></span><span class="token string"> values (0-4,294,967,295)"</span></span><span class="token punctuation">)</span> |
Example 2: Looking at the Bits of a Number
Let’s write a simple function to see the binary representation of a number with a fixed number of bits.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="token keyword">def</span> <span class="token function">show_bits</span><span class="token punctuation">(</span>number<span class="token punctuation">,</span> num_bits<span class="token operator">=</span><span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""Show the binary representation of a number with leading zeros."""</span> binary <span class="token operator">=</span> <span class="token builtin">bin</span><span class="token punctuation">(</span>number<span class="token punctuation">)</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"># bin() returns '0b...', so we slice off the '0b'</span> <span class="token comment"># Pad with leading zeros to make it num_bits long</span> padded <span class="token operator">=</span> binary<span class="token punctuation">.</span>zfill<span class="token punctuation">(</span>num_bits<span class="token punctuation">)</span> <span class="token comment"># Add spaces every 4 bits for readability</span> spaced <span class="token operator">=</span> <span class="token string">' '</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span>padded<span class="token punctuation">[</span>i<span class="token punctuation">:</span>i<span class="token operator">+</span><span class="token number">4</span><span class="token punctuation">]</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>padded<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</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>number<span class="token punctuation">:</span><span class="token format-spec">3</span><span class="token punctuation">}</span></span><span class="token string"> decimal = </span><span class="token interpolation"><span class="token punctuation">{</span>spaced<span class="token punctuation">}</span></span><span class="token string"> binary"</span></span><span class="token punctuation">)</span> <span class="token comment"># Show different numbers in binary</span> numbers <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">,</span> <span class="token number">16</span><span class="token punctuation">,</span> <span class="token number">42</span><span class="token punctuation">,</span> <span class="token number">127</span><span class="token punctuation">,</span> <span class="token number">128</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">]</span> <span class="token keyword">for</span> num <span class="token keyword">in</span> numbers<span class="token punctuation">:</span> show_bits<span class="token punctuation">(</span>num<span class="token punctuation">)</span> |
Output:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
0 decimal = 0000 0000 binary 1 decimal = 0000 0001 binary 2 decimal = 0000 0010 binary 4 decimal = 0000 0100 binary 8 decimal = 0000 1000 binary 15 decimal = 0000 1111 binary 16 decimal = 0001 0000 binary 42 decimal = 0010 1010 binary 127 decimal = 0111 1111 binary 128 decimal = 1000 0000 binary 255 decimal = 1111 1111 binary |
Example 3: How Text is Stored
Let’s see how a simple message is stored in bytes.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
message <span class="token operator">=</span> <span class="token string">"Hello"</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Message: '</span><span class="token interpolation"><span class="token punctuation">{</span>message<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">"Bytes:"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> char <span class="token keyword">in</span> message<span class="token punctuation">:</span> ascii_value <span class="token operator">=</span> <span class="token builtin">ord</span><span class="token punctuation">(</span>char<span class="token punctuation">)</span> binary <span class="token operator">=</span> <span class="token builtin">bin</span><span class="token punctuation">(</span>ascii_value<span class="token punctuation">)</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 punctuation">.</span>zfill<span class="token punctuation">(</span><span class="token number">8</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>char<span class="token punctuation">}</span></span><span class="token string">' -> ASCII </span><span class="token interpolation"><span class="token punctuation">{</span>ascii_value<span class="token punctuation">:</span><span class="token format-spec">3</span><span class="token punctuation">}</span></span><span class="token string"> -> binary </span><span class="token interpolation"><span class="token punctuation">{</span>binary<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Calculate total size in bits and bytes</span> total_bits <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">8</span> total_bytes <span class="token operator">=</span> <span class="token builtin">len</span><span class="token punctuation">(</span>message<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"\nTotal storage: </span><span class="token interpolation"><span class="token punctuation">{</span>total_bytes<span class="token punctuation">}</span></span><span class="token string"> bytes (</span><span class="token interpolation"><span class="token punctuation">{</span>total_bits<span class="token punctuation">}</span></span><span class="token string"> bits)"</span></span><span class="token punctuation">)</span> |
Output:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Message: 'Hello' Bytes: 'H' -> ASCII 72 -> binary 01001000 'e' -> ASCII 101 -> binary 01100101 'l' -> ASCII 108 -> binary 01101100 'l' -> ASCII 108 -> binary 01101100 'o' -> ASCII 111 -> binary 01101111 Total storage: 5 bytes (40 bits) |
So the word “Hello” is stored in your computer’s memory as:
01001000 01100101 01101100 01101100 01101111
Example 4: Estimating File Sizes
Let’s estimate how much storage different types of content would require.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<span class="token comment"># Text: A typical page of text is about 3000 characters</span> chars_per_page <span class="token operator">=</span> <span class="token number">3000</span> bytes_per_char <span class="token operator">=</span> <span class="token number">1</span> <span class="token comment"># For ASCII text</span> bytes_per_page <span class="token operator">=</span> chars_per_page <span class="token operator">*</span> bytes_per_char <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"One page of text: ~</span><span class="token interpolation"><span class="token punctuation">{</span>bytes_per_page<span class="token punctuation">:</span><span class="token format-spec">,</span><span class="token punctuation">}</span></span><span class="token string"> bytes = </span><span class="token interpolation"><span class="token punctuation">{</span>bytes_per_page<span class="token operator">/</span><span class="token number">1024</span><span class="token punctuation">:</span><span class="token format-spec">.1f</span><span class="token punctuation">}</span></span><span class="token string"> KB"</span></span><span class="token punctuation">)</span> <span class="token comment"># Images: A 12-megapixel photo, 3 bytes per pixel (RGB)</span> megapixels <span class="token operator">=</span> <span class="token number">12</span> pixels <span class="token operator">=</span> megapixels <span class="token operator">*</span> <span class="token number">1_000_000</span> bytes_per_pixel <span class="token operator">=</span> <span class="token number">3</span> <span class="token comment"># 1 byte each for Red, Green, Blue</span> image_bytes <span class="token operator">=</span> pixels <span class="token operator">*</span> bytes_per_pixel <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"12 MP photo: ~</span><span class="token interpolation"><span class="token punctuation">{</span>image_bytes<span class="token punctuation">:</span><span class="token format-spec">,</span><span class="token punctuation">}</span></span><span class="token string"> bytes = </span><span class="token interpolation"><span class="token punctuation">{</span>image_bytes<span class="token operator">/</span><span class="token number">1024</span><span class="token operator">/</span><span class="token number">1024</span><span class="token punctuation">:</span><span class="token format-spec">.1f</span><span class="token punctuation">}</span></span><span class="token string"> MB"</span></span><span class="token punctuation">)</span> <span class="token comment"># Music: 3-minute song at 128 kbps (kilobits per second)</span> bitrate_kbps <span class="token operator">=</span> <span class="token number">128</span> <span class="token comment"># kilobits per second</span> duration_seconds <span class="token operator">=</span> <span class="token number">3</span> <span class="token operator">*</span> <span class="token number">60</span> <span class="token comment"># 3 minutes</span> total_kilobits <span class="token operator">=</span> bitrate_kbps <span class="token operator">*</span> duration_seconds total_bytes <span class="token operator">=</span> total_kilobits <span class="token operator">*</span> <span class="token number">1024</span> <span class="token operator">/</span> <span class="token number">8</span> <span class="token comment"># Convert kilobits to bytes</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"3-minute song (128 kbps): ~</span><span class="token interpolation"><span class="token punctuation">{</span>total_bytes<span class="token operator">/</span><span class="token number">1024</span><span class="token operator">/</span><span class="token number">1024</span><span class="token punctuation">:</span><span class="token format-spec">.1f</span><span class="token punctuation">}</span></span><span class="token string"> MB"</span></span><span class="token punctuation">)</span> <span class="token comment"># Video: 90-minute movie at 5 Mbps (megabits per second)</span> bitrate_mbps <span class="token operator">=</span> <span class="token number">5</span> <span class="token comment"># megabits per second</span> duration_seconds <span class="token operator">=</span> <span class="token number">90</span> <span class="token operator">*</span> <span class="token number">60</span> total_megabits <span class="token operator">=</span> bitrate_mbps <span class="token operator">*</span> duration_seconds total_gigabytes <span class="token operator">=</span> <span class="token punctuation">(</span>total_megabits <span class="token operator">*</span> <span class="token number">1_000_000</span> <span class="token operator">/</span> <span class="token number">8</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">1024</span><span class="token operator">**</span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token comment"># Convert to GB</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"90-minute movie (5 Mbps): ~</span><span class="token interpolation"><span class="token punctuation">{</span>total_gigabytes<span class="token punctuation">:</span><span class="token format-spec">.1f</span><span class="token punctuation">}</span></span><span class="token string"> GB"</span></span><span class="token punctuation">)</span> |
Part 7: Bitwise Operations (Manipulating Individual Bits)
Because bits are so fundamental, programming languages provide special operators to work directly with them. These are called bitwise operators. They operate on the individual bits of a number.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
a <span class="token operator">=</span> <span class="token number">0b1100</span> <span class="token comment"># 12 in decimal</span> b <span class="token operator">=</span> <span class="token number">0b1010</span> <span class="token comment"># 10 in decimal</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"a = </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>a<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"b = </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>b<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">"-"</span> <span class="token operator">*</span> <span class="token number">30</span><span class="token punctuation">)</span> <span class="token comment"># AND (&) - 1 only if both bits are 1</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"a & b = </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> <span class="token comment"># 0b1000 (8)</span> <span class="token comment"># OR (|) - 1 if at least one bit is 1</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"a | b = </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> <span class="token comment"># 0b1110 (14)</span> <span class="token comment"># XOR (^) - 1 if bits are different</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"a ^ b = </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> <span class="token comment"># 0b0110 (6)</span> <span class="token comment"># NOT (~) - flips all bits (careful with signed integers)</span> result <span class="token operator">=</span> <span class="token operator">~</span>a <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"~a = </span><span class="token interpolation"><span class="token punctuation">{</span>result<span class="token punctuation">}</span></span><span class="token string"> (in decimal)"</span></span><span class="token punctuation">)</span> <span class="token comment"># Left shift (<<) - shifts bits left, fills with 0</span> result <span class="token operator">=</span> a <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"a << 1 = </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> <span class="token comment"># 0b11000 (24)</span> <span class="token comment"># Right shift (>>) - shifts bits right</span> result <span class="token operator">=</span> a <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"a >> 1 = </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> <span class="token comment"># 0b0110 (6)</span> |
These operations are extremely fast and are used in graphics, cryptography, networking, and systems programming.
Summary: The Bits and Bytes Philosophy
-
A bit is the most basic unit of information: a single 0 or 1.
-
A byte is 8 bits, the fundamental unit of storage.
-
Bits and bytes allow computers to represent numbers using the binary system.
-
They represent text through character encodings like ASCII and Unicode.
-
Storage units (KB, MB, GB, TB) are powers of 2 (usually) or powers of 10 (sometimes).
-
With N bits, you can represent 2ᴺ different values.
-
Bitwise operators allow direct manipulation of individual bits for maximum efficiency.
Understanding bits and bytes is like understanding the alphabet of computing. It’s the foundation upon which everything else—from simple text files to complex operating systems—is built. Once you grasp this, you’ll have a much deeper appreciation for how computers store, process, and transmit information.
