Learning Programming with Eas

(Easy Application Script Tutorial)

Each bit carries only a single **yes-or-no** information,
such as "Is the A key pressed?".
Most I/O devices, however, use **signals** that can
have a wide **range** of values, like the **brightness**
of a pixel on the monitor, or the **movements** of
microphone and speaker membranes.
Using a group of bits together, where each bit
serves as a **binary digit**, you can create
**numbers** to represent such signals.
Using one bit:
bit 0 = number 0
bit 1 = number 1
Using two bits:
two bits 00 = number 0
two bits 01 = number 1
two bits 10 = number 2
two bits 11 = number 3
Using three bits:
three bits 000 = number 0
three bits 001 = number 1
three bits 010 = number 2
three bits 011 = number 3
three bits 100 = number 4
three bits 101 = number 5
three bits 110 = number 6
three bits 111 = number 7
Each additional bit **doubles** the range of numbers.
It **repeats** the prior range first completely
with the leading bit set to 0, then **again** with the
leading bit set to 1 and its 2^(n-1) value added.
(100=4 is 000=0 + 4, 101=5 is 001=1 + 4,
110=6 is 010=2 + 4, 111=7 is 011=3 + 4.)
With B as the number of bits, you can create
**B^2** different numbers:
1 bit: 0..1 (2 numbers)
2 bits: 0..3 (4 numbers)
3 bits: 0..7 (8 numbers)
4 bits: 0..15 (16 numbers)
5 bits: 0..31 (32 numbers)
6 bits: 0..63 (64 numbers)
7 bits: 0..127 (128 numbers)
Early computers used **7 bits** a lot, because this
offers a range that is enough to represent a
**percentage** value, and it also allowed for
storing **text** files, which needs 26 letters
both in lowercase and uppercase, 10 digits
(together 2×26+10=62 characters)
and several further characters such as
space, . ! ? , ; : " - ( ), a line break and so on.
Soon one **further** bit was added to create with
8 bits: 0..255 (256 numbers)
the basic memory unit used by computers,
named the **byte**, which can conveniently
be written as a 2-digit hexadecimal number
and has enough values (256) to cover
many practical I/O and **calculation** needs.
From then on, when more precise numbers
or bigger numbers were needed, one did not
add further bits, but rather used whole
**groups of bytes** together.
A group of two bytes was called a **word**
(as 256×256 = 65,536, enough to cover even a
very thorough dictionary of the English language),
and two words (= more than 4 **billion** numbers!)
was called a "double word".
Various mathematical innovations allowed for
Byte-based numbers being used optionally in a
**signed** interpretation, for instance a signed byte
does not represent 0..255 but **-128**..**+127**,
and even in a **scientific exponent** notation, where
**floating-point numbers** are written as **m×10^x**,
with m and x being stored as signed bytes,
words or double words in the computer.