← Binary Course — Part D, lesson 1 of 4 (Fractions in binary)

14. Place Value Past the Point

LESSON 14 | 0000 1110 | 0x0e

The concept

Every lesson so far has stayed on the left side of an invisible line: whole numbers only. You already know how to cross that line in decimal, though — in 347.25, place value doesn't stop at the ones column, it just keeps going, with each position past the point worth ten times less than the one before it instead of ten times more:

hundreds  tens  ones  .  tenths  hundredths
   3        4    7    .    2         5
 (10^2)   (10^1)(10^0)   (10^-1)   (10^-2)

0.25 means 2 x (1/10) + 5 x (1/100), nothing more mysterious than the whole-number place value Lesson 2 already covered, just running in the other direction.

Binary works exactly the same way, with the same two changes Lesson 2 made to whole numbers: each position past the point is only twice as small as the one before it (not ten times), and each position can only hold a 0 or a 1.

ones  .  halves  quarters  eighths  sixteenths
2^0   .   2^-1      2^-2     2^-3       2^-4
            1/2       1/4      1/8       1/16

Positions past the point are named by their place value or their ordinal position ("the first position after the point," "worth 1/8") — Lesson 2's bit-0-is-rightmost indexing covers whole numbers only and doesn't extend past the point. To read a binary fraction's decimal value, do exactly what Lesson 2's Example 2 did for whole numbers: add up the place values of every position holding a 1.

One thing does not carry over, and it's worth naming before it causes a mistake: the same digits mean different things depending on whether a point is present, and where. 011000 with no point is a whole number, 24. 0.11000 — the same six digits, a point inserted after the first one — is 0.75, an entirely different value. Bits alone never say which reading applies; only the point tells you. That's why a bit string in this course is never shown without either an explicit point or an explicit "(read as a whole number)" note — leaving it out would leave the value itself undefined, not just unclear. Example 3 below works through exactly this trap.

Example 1 — reading a pure fraction

Take 0.101. Line up the three positions after the point with their place values and add up wherever there's a 1:

position:      1st    2nd    3rd
bit:            1      0      1
place value:   1/2    1/4    1/8

1 x 1/2 + 0 x 1/4 + 1 x 1/8 = 0.5 + 0.125 = 0.625. 0.101 is 0.625.

Example 2 — reading a mixed whole-and-fractional number

Take 0110 1101.101 — Lesson 2's running example, 0110 1101 (worth 109), with Example 1's fraction tacked on after the point. Read each side of the point by its own rule and add the results:

whole part:       0110 1101  =  109   (Lesson 2's method)
fractional part:  .101       =  0.625 (Example 1's method)

109 + 0.625 = 109.625

0110 1101.101 is 109.625. The point doesn't change either method — it just marks where one place-value table (powers of two, growing) hands off to the other (powers of two, shrinking).

Example 3 — the same bits, two different values

Here's the trap the concept section named. Take the six digits 011000 with no point at all — an ordinary whole number:

place value:   32   16   8   4   2   1
bit:            0    1   1   0   0   0

16 + 8 = 24.

Now take the same six digits with a point inserted after the first one: 0.11000.

position:      1st    2nd    3rd    4th    5th
bit:            1      1      0      0      0
place value:   1/2    1/4    1/8   1/16   1/32

1/2 + 1/4 = 0.75.

Same six digits, 24 versus 0.75 — not close, not a rounding difference, entirely different values. Nothing in the bits themselves picks one reading over the other; the point is the only thing that decides, which is exactly why it's never left out or left implicit.

Example 4 — building a fraction's bit pattern from a decimal value

Take 0.8125 and go the other direction, the same greedy method Lesson 2 Example 3 used for whole numbers: at each position, ask "does this position's place value fit into what's left?" If yes, set that bit to 1 and subtract; if no, set it to 0 and move on. Stop once nothing is left.

place value 1/2:   1/2   ≤ 0.8125 → bit = 1, remainder 0.8125 − 0.5   = 0.3125
place value 1/4:   1/4   ≤ 0.3125 → bit = 1, remainder 0.3125 − 0.25  = 0.0625
place value 1/8:   1/8   ≤ 0.0625? no → bit = 0
place value 1/16:  1/16  ≤ 0.0625 → bit = 1, remainder 0.0625 − 0.0625 = 0

Reading the bits in order gives 0.1101. Check it against Example 1's method: 1/2 + 1/4 + 1/16 = 0.5 + 0.25 + 0.0625 = 0.8125. Correct.

This greedy method only lands on remainder 0 because 0.8125 happens to be built entirely from powers of two (it's 13/16). Lesson 15 covers what to do when a decimal fraction doesn't cooperate that way.

Exercises

Exercise 1. Using Example 2's method, what decimal value does 1010.0101 represent?

Exercise 2. Using Example 4's method, find the bit pattern for 5.375 (whole part and fractional part separately, then combined).

Exercise 3. A word contains the six digits 010100, with no point shown. What value does it represent — as a whole number, and separately, as a fraction assuming a point sits after the first digit? Can you say which one is "the" value without more information? Why or why not?

Exercise 4. A classmate reads 0.101 by reusing Lesson 2's whole-number place values directly: "the three positions after the point are just like three bit positions, so their place values are 4, 2, 1 — 1x4 + 0x2 + 1x1 = 5." What did they get wrong, and what's the correct value?

Show Answer Key

1. Whole part 1010 = 8 + 2 = 10 (Lesson 2's method). Fractional part .0101: positions worth 1/2, 1/4, 1/8, 1/16 under bits 0, 1, 0, 1, so 1/4 + 1/16 = 0.25 + 0.0625 = 0.3125. Total: 10 + 0.3125 = 10.3125.

2. Whole part: 5 = 0101 (Lesson 2's greedy method: 4 ≤ 5 → bit set, remainder 1; 2 ≤ 1? no; 1 ≤ 1 → bit set, remainder 0). Fractional part: 0.375 — 1/2 ≤ 0.375? no; 1/4 ≤ 0.375 → bit set, remainder 0.125; 1/8 ≤ 0.125 → bit set, remainder 0 — giving .011. Combined: 0101.011.

3. As a whole number, 010100 = 16 + 4 = 20. As a fraction with a point after the first digit, 0.10100 = 1/2 + 1/8 = 0.625. Neither reading is "the" value — the six digits are identical in both cases, and nothing about the bits themselves indicates where, or whether, a point belongs. The value is only well-defined once something outside the bits (a stated convention, a labeled point) settles the question, exactly as the concept section's 011000 example showed.

4. The classmate reused whole-number place values (4, 2, 1, growing to the left) for positions that are past the point, where place values shrink to the right instead (1/2, 1/4, 1/8). Lesson 2's indexing scheme covers whole-number positions only; it was never meant to extend past the point, and doing so silently produces a plausible-looking but wrong answer. The correct value, using the shrinking place values: 1x1/2 + 0x1/4 + 1x1/8 = 0.625.

Lesson 15 picks up the natural next question: given an arbitrary decimal fraction, how do you find its binary bit pattern when — unlike this lesson's 0.8125 — it doesn't land on a clean sum of powers of two at all?