Binary is fixed-length and machine-clocked. Morse is variable-length and ear-clocked. Both use only two states, yet one built computers and the other crossed oceans. This is the interactive field guide, with correct timing, proper UTF-8, and Octave that actually runs.
1703: Leibniz formalizes base-2. 1937: Shannon shows relays can do Boolean logic. 1945: von Neumann stores programs as binary. The rest is your laptop.
| CHAR | BINARY | DEC | HEX | NAME |
|---|
Shows 0-127 + common 128-255. Filter to find control codes. Tap a row to load into explorer.
Fixed length means you know where the next symbol starts without looking ahead. CPUs can fetch 8/16/32/64 bits in one clock. Variable-length (like Morse or UTF-8) needs a state machine to parse. Tradeoff: fixed wastes bits for common symbols, variable saves bits but costs time. That's exactly why Morse is Huffman-like before Huffman (1952).
1836: Morse & Vail. 1865: International Morse standard. SOS = ...---... is one prosign, not three letters, chosen because it's 9 units with no gaps — impossible to mistake.
Prosigns sent with no inter-char gap. On ham radio, still daily use at ~20 WPM.
Includes letters, digits, punctuation, and prosigns. Unicode display toggle in translator below.
Tip: SOS = ··· ——— ··· with ~650ms letter gap. Try your name.
All snippets tested in Octave 8+. dec2bin/bin2dec and containers.Map make these two codes trivial. Fixed: snippet 8 now loops 26 letters, not 5. Added parity and Farnsworth examples.
Morse optimizes for human frequency: E (. ) and T (-) are shortest because they're most common — it's a Huffman code, 110 years before Huffman (1952). Binary optimizes for machine simplicity: fixed length, easy to clock, perfect for error correction.
| PROPERTY | BINARY | MORSE |
|---|---|---|
| Symbols | 0, 1 (2 levels) | ·, —, 3 gaps (5 timing states) |
| Length | Fixed (8-bit = 256 values) | Variable (E=1 unit, J=10 units) |
| Clock | Crystal, GHz | Human ear, ~20 WPM |
| Framing | Start bit / byte boundary | Gap length detection |
| Error control | Parity, Hamming, CRC, LDPC | Human asks QRS? (repeat), ear redundancy |
| Density | 1 bit / symbol (raw) | ~0.6 bits / timing unit, but better for noisy ear |
| Optimality | Optimal for machines | Huffman-optimal for 1840s English letter freq |
Any channel with two distinguishable states can carry information. Nyquist says you need 2× bandwidth to resolve a state. Two states are the most noise-immune: threshold is in the middle. That's why both Morse (tone on/off) and binary (voltage high/low) survived.
3 key ideas, concise:Morse without gaps is ambiguous: ...---... could be SOS or 3B or V... etc. Binary without fixed width is also ambiguous: 101 could be 5 or 1,0,1. Solution: prefix-free codes. Morse becomes prefix-free *with* gaps. UTF-8 is prefix-free by design: leading bits tell length. Binary fixed-width is trivially prefix-free.
| TERM | MEANING |
|---|---|
| Baud | Symbols/sec. 1 baud ≠ 1 bit/sec if symbols carry >1 bit |
| WPM (PARIS) | Word PARIS repeated N times per minute. Standard. |
| Farnsworth | High char speed, stretched gaps. Learn rhythm, not dots. |
| Huffman | Optimal variable-length code for known frequencies. |
| LSB/MSB | Least / Most Significant Bit. LSB first = little-endian bit order. |
| Parity | Extra bit making total ones even/odd. Detects 1 error. |
| Prosign | Two letters sent as one with no gap. e.g., AR = end. |
| Two's complement | Invert +1 to negate. Why 11111111 = -1 in int8. |
Want to experiment? Open browser console — all functions are global: textToBin(), binToText(), toMorseText(), fromMorse(), morsePlay().