Двоичное счисление на пальцах

Если у вас в шко­ле была инфор­ма­ти­ка, не исклю­че­но, что там было упраж­не­ние на пере­вод обыч­ных чисел в дво­ич­ную систе­му и обрат­но. Мало­ве­ро­ят­но, что кто-то вам объ­яс­нял прак­ти­че­ский смысл этой про­це­ду­ры и отку­да вооб­ще берёт­ся дво­ич­ное счис­ле­ние. Давай­те закро­ем этот разрыв.

Эта ста­тья не име­ет прак­ти­че­ской цен­но­сти — читай­те её про­сто ради инте­ре­са к окру­жа­ю­ще­му миру. Если нуж­ны прак­ти­че­ские ста­тьи, захо­ди­те в наш раз­дел «Где-то баг», там каж­дая ста­тья — это прак­ти­че­ски при­ме­ни­мый проект.

Отличный план

Что­бы объ­яс­нить всё это, нам пона­до­бит­ся несколь­ко тезисов:

  1. Систе­ма запи­си чис­ла — это шифр.
  2. Мы при­вык­ли шиф­ро­вать деся­тью знаками.
  3. Но систе­ма запи­си чисел может быть любой. Это условность.
  4. Дво­ич­ная систе­ма — это тоже нор­маль­ная система.
  5. Всё тлен и суета.

Система записи — это шифр

Если у нас есть девять коров, мы можем запи­сать их как 🐄🐄🐄🐄🐄🐄🐄🐄🐄 или как 9 × 🐄.

Поче­му 9 озна­ча­ет «девять»? И поче­му вооб­ще есть такое сло­во? Поче­му такое коли­че­ство мы назы­ва­ем этим сло­вом? Вопрос фило­соф­ский, и корот­кий ответ — нам нуж­но оди­на­ко­во назы­вать чис­ла, что­бы друг дру­га пони­мать. Сло­во «девять», циф­ра 9, а так­же осталь­ные сло­ва — это шифр, кото­рый мы выучи­ли в шко­ле, что­бы друг с дру­гом общаться.

Допу­стим, к наше­му ста­ду при­би­ва­ют­ся еще 🐄🐄🐄. Теперь у нас 🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄 — две­на­дцать коров, 12. Поче­му мы зна­ем, что 12 — это «две­на­дцать»? Пото­му что мы дого­во­ри­лись так шиф­ро­вать числа.

Нам очень лег­ко рас­шиф­ро­вы­вать запи­си типа 12, 1920, 100 500 и т. д. — мы к ним при­вык­ли, мы учи­ли это в шко­ле. Но это шифр. 12 × 🐄 — это не то же самое, что 🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄🐄. Это некая абстрак­ция, кото­рой мы поль­зу­ем­ся, что­бы упро­стить себе счёт.

Мы привыкли шифровать десятью знаками

У нас есть зна­ки 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9 — все­го десять зна­ков. Этим чис­лом зна­ков мы шиф­ру­ем коли­че­ство еди­ниц, десят­ков, сотен, тысяч и так далее.

Мы дого­во­ри­лись, что нам важен поря­док запи­си чис­ла. Мы зна­ем, что самый пра­вый знак в запи­си озна­ча­ет чис­ло еди­ниц, сле­ду­ю­щий знак (вле­во) озна­ча­ет чис­ло десят­ков, потом сотен и далее.

Напри­мер, перед нами чис­ло 19 547. Мы зна­ем, что в нём есть:

1 × 10 000
9 × 1000
5 × 100
4 × 10
7 × 1

Если при­гля­деть­ся, то каж­дый сле­ду­ю­щий раз­ряд чис­ла пока­зы­ва­ет сле­ду­ю­щую сте­пень десятки:

1 × 104
9 × 103
5 × 102
4 × 101
7 × 100

Нам удоб­но счи­тать сте­пе­ня­ми десят­ки, пото­му что у нас по десять паль­цев и мы с ран­не­го дет­ства научи­лись счи­тать до десяти.

Система записи — это условность

Пред­ста­вим бре­до­вую ситу­а­цию: у нас не 10 паль­цев, а 6. И в шко­ле нас учи­ли счи­тать не десят­ка­ми, а шестёр­ка­ми. И вме­сто при­выч­ных цифр мы бы исполь­зо­ва­ли зна­ки ØABCDE. Ø — это по-нашему ноль, A — 1, B — 2, E — 5.

Вот как выгля­де­ли бы при­выч­ные нам циф­ры в этой бре­до­вой систе­ме счисления:

0 — Ø
1 — A
2 — B
3 — C
4 — D
5 — E
6 — AØ
7 — AA
8 — AB
9 — AC
10 — AD
11 — AE
12 — BØ
13 — BA
14 — BB
15 — BC
16 — BD
17 — BE
18 — CØ
19 — CA
20 — CB
21 — CC
22 — CD
23 — CE
24 — DØ
25 — DA
26 — DB
27 — DC
28 — DD
29 — DE
30 — EØ
31 — EA
32 — EB
33 — EC
34 — ED
35 — EE
36 — AØØ
37 — AØA
38 — AØB
39 — AØC
40 — AØD
41 — AØE

В этой систе­ме мы счи­та­ем сте­пе­ня­ми шестёр­ки. Чис­ло ABADØ мож­но было бы пере­ве­сти в при­выч­ную нам деся­тич­ную запись вот так:

A × 64 = 1 × 1296 = 1296

B × 63 = 2 × 216 = 432

A × 62 = 1 × 36 = 36

D × 61 = 4 × 6 = 24

Ø × 60 = 0 × 1 = 0

1296 + 432 + 36 + 24 + 0 = 1788. В нашей деся­тич­ной систе­ме это 1788, а у людей из парал­лель­ной все­лен­ной это ABADØ, и это равноценно.

Выгля­дит бре­до­во, но попро­буй­те вооб­ра­зить, что у нас в сум­ме все­го шесть паль­цев. Каж­дый стол­бик — как раз шесть чисел. Очень лег­ко счи­тать в уме. Если бы нас с дет­ства учи­ли счи­тать шестёр­ка­ми, мы бы спо­кой­но выучи­ли этот спо­соб и без про­блем всё счи­та­ли. А счёт десят­ка­ми вызы­вал бы у нас искрен­нее недо­уме­ние: «Что за бред, счи­тать чис­лом AD? Гораз­до удоб­нее счи­тать от Ø до E!»

То, как мы шиф­ру­ем и запи­сы­ва­ем чис­ла, — это след­ствие мно­го­ве­ко­вой тра­ди­ции и физио­ло­гии. Все­лен­ной, кос­мо­су, при­ро­де и ста­дам коров глу­бо­ко без­раз­лич­но, что мы счи­та­ем сте­пе­ня­ми десят­ки. При­ро­да не укла­ды­ва­ет­ся в эту нашу систе­му счёта.

Напри­мер, свет рас­про­стра­ня­ет­ся в ваку­у­ме со ско­ро­стью 299 792 458 мет­ров в секун­ду. Ему пле­вать, что нам для ров­но­го счё­та хоте­лось бы, что­бы он летел со ско­ро­стью 300 тысяч кило­мет­ров в секун­ду. А уско­ре­ние сво­бод­но­го паде­ния тела воз­ле поверх­но­сти Зем­ли — 9,81 м/с2. Так и хочет­ся спро­сить: «Тело, а ты не мог­ло бы иметь уско­ре­ние 10 м/с2?» — но телу пле­вать на наши систе­мы счисления.

Двоичная система (тоже нормальная)

Внут­ри ком­пью­те­ра рабо­та­ют тран­зи­сто­ры. У них нет зна­ков 0, 1, 2, 3… 9. Тран­зи­сто­ры могут быть толь­ко вклю­чён­ны­ми и выклю­чен­ны­ми — обо­зна­чим их 💡 и ⚫.

Мы можем научить ком­пью­тер шиф­ро­вать наши чис­ла эти­ми тран­зи­сто­ра­ми так же, как шести­па­лые люди шиф­ро­ва­ли наши чис­ла бук­ва­ми. Толь­ко у нас будет не 6 букв, а все­го две: 💡 и ⚫. И выхо­дит, что в каж­дом раз­ря­де будет сто­ять не чис­ло деся­ток в раз­ной сте­пе­ни, не чис­ло шестё­рок в раз­ной сте­пе­ни, а чис­ло… дво­ек в раз­ной сте­пе­ни. И так как у нас все­го два зна­ка, то полу­ча­ет­ся, что мы можем обо­зна­чить либо нали­чие двой­ки в какой-то сте­пе­ни, либо отсутствие:

0 — ⚫
1 — 💡

2 — 💡
3 — 💡💡

4 — 💡⚫⚫
5 — 💡💡
6 — 💡💡
7 — 💡💡💡

8 — 💡⚫⚫⚫
9 — 💡⚫⚫💡
10 — 💡💡
11 — 💡💡💡
12 — 💡💡⚫⚫
13 — 💡💡💡
14 — 💡💡💡
15 — 💡💡💡💡
16 — 💡⚫⚫⚫⚫
17 — 💡⚫⚫⚫💡
18 — 💡⚫⚫💡
19 — 💡⚫⚫💡💡
20 — 💡💡⚫⚫
21 — 💡💡💡
21 — 💡💡💡
23 — 💡💡💡💡
24 — 💡💡⚫⚫⚫
25 — 💡💡⚫⚫💡
26 — 💡💡💡
27 — 💡💡💡💡
28 — 💡💡💡⚫⚫
29 — 💡💡💡💡
30 — 💡💡💡💡
31 — 💡💡💡💡💡
32 — 💡⚫⚫⚫⚫⚫
33 — 💡⚫⚫⚫⚫💡
34 — 💡⚫⚫⚫💡
35 — 💡⚫⚫⚫💡💡
36 — 💡⚫⚫💡⚫⚫
37 — 💡⚫⚫💡💡
38 — 💡⚫⚫💡💡
39 — 💡⚫⚫💡💡💡
40 — 💡💡⚫⚫⚫
41 — 💡💡⚫⚫💡
42 — 💡💡💡
43 — 💡💡💡💡
44 — 💡💡💡⚫⚫
45 — 💡⚫💡💡⚫💡
46 — 💡⚫💡💡💡⚫
47 — 💡⚫💡💡💡💡
48 — 💡💡⚫⚫⚫⚫
49 — 💡💡⚫⚫⚫💡
50 — 💡💡⚫⚫💡⚫
51 — 💡💡⚫⚫💡💡
52 — 💡💡⚫💡⚫⚫
53 — 💡💡⚫💡⚫💡
54 — 💡💡⚫💡💡⚫
55 — 💡💡⚫💡💡💡
56 — 💡💡💡⚫⚫⚫
57 — 💡💡💡⚫⚫💡
58 — 💡💡💡⚫💡⚫
59 — 💡💡💡⚫💡💡
60 — 💡💡💡💡⚫⚫
61 — 💡💡💡💡⚫💡
62 — 💡💡💡💡💡⚫
63 — 💡💡💡💡💡💡

Если перед нами чис­ло 💡 ⚫💡⚫⚫ 💡💡⚫⚫, мы можем раз­ло­жить его на раз­ря­ды, как в преды­ду­щих примерах:

💡 = 1 × 28 = 256

⚫ = 0 × 27 = 0

💡 = 1 × 26 = 64

⚫ = 0 × 25 = 0

⚫ = 0 × 24 = 0

💡 = 1 × 23 = 8

💡 = 1 × 22 = 4

⚫ = 0 × 21 = 0

⚫ = 0 × 20 = 0

256 + 0 + 64 + 0 + 0 + 8 + 4 + 0 + 0 = 332

Полу­ча­ет­ся, что деся­ти­па­лые люди могут запи­сать это чис­ло с помо­щью цифр 332, а ком­пью­тер с тран­зи­сто­ра­ми — после­до­ва­тель­но­стью транзисторов 💡⚫💡⚫⚫ 💡💡⚫⚫.

Если теперь заме­нить вклю­чён­ные тран­зи­сто­ры на еди­ни­цы, а выклю­чен­ные на нули, полу­чит­ся запись 1 0100 1100. Это и есть наша дво­ич­ная запись того же само­го числа.

Почему говорят, что компьютер состоит из единиц и нулей (и всё тлен)

Инже­не­ры научи­лись шиф­ро­вать при­выч­ные для нас чис­ла в после­до­ва­тель­ность вклю­чён­ных и выклю­чен­ных транзисторов.

Даль­ше эти тран­зи­сто­ры научи­лись соеди­нять таким обра­зом, что­бы они уме­ли скла­ды­вать зашиф­ро­ван­ные чис­ла. Напри­мер, если сло­жить 💡⚫⚫ и ⚫⚫💡, полу­чит­ся 💡⚫💡. Мы писа­ли об этом подроб­нее в ста­тье о сло­же­нии через тран­зи­сто­ры.

Даль­ше эти сум­мы научи­лись полу­чать супер­быст­ро. Потом научи­лись полу­чать раз­ни­цу. Потом умно­жать. Потом делить. Потом всё это тоже научи­лись делать супер­быст­ро. Потом научи­лись шиф­ро­вать не толь­ко чис­ла, но и бук­вы. Научи­лись их хра­нить и счи­ты­вать. Научи­лись шиф­ро­вать цве­та и коор­ди­на­ты. Научи­лись хра­нить кар­тин­ки. После­до­ва­тель­но­сти кар­ти­нок. Видео. Инструк­ции для ком­пью­те­ра. Про­грам­мы. Опе­ра­ци­он­ные систе­мы. Игры. Ней­ро­се­ти. Дипфейки.

И всё это осно­ва­но на том, что ком­пью­тер уме­ет быстро-быстро скла­ды­вать чис­ла, зашиф­ро­ван­ные как после­до­ва­тель­но­сти вклю­чён­ных и выклю­чен­ных транзисторов.

При этом ком­пью­тер не пони­ма­ет, что он дела­ет. Он про­сто гоня­ет ток по тран­зи­сто­рам. Тран­зи­сто­ры не пони­ма­ют, что они дела­ют. По ним про­сто бежит ток. Лишь люди при­да­ют все­му это­му смысл.

Когда чело­ве­ка не ста­нет, ско­рость све­та будет по-прежнему 299 792 458 мет­ров в секун­ду. Но уже не будет тех, кто при­мет­ся счи­тать мет­ры и секун­ды. Такие дела.