Найти в Дзене
ZDG

Больше джиннов! (Как записать все числа с помощью 0 и 1)

В предыдущих выпусках мы разобрались, почему память компьютера может сохранять только два числа: 0 и 1. Как хранить другие числа? Один человек выпустил джинна из лампы. Джинн предложил исполнить три желания. Человек сразу же сказал – больше желаний! Джинн ответил – это запрещено. Недолго думая, человек сказал – больше джиннов! Это и есть решение. Если элемент памяти не может записать больше чисел, значит нужно взять больше элементов. Может быть, вы не обращали внимания, но обычные числа 10, 100, 1000 построены именно так. Древнейший способ счета - 10 пальцев на руках. Это элемент памяти, в котором, загибая пальцы, можно сохранить числа от 0 до 10. Но нельзя сохранить 11, 12 и далее. Тогда, сосчитав до 10, можно позвать друга и попросить его загнуть один палец. То есть друг запомнит, что вы один раз досчитали до десяти. Но ведь вы только что добавили еще один элемент памяти. Запись 10 означает буквально следующее: есть ДВА элемента памяти (ваш друг и вы). В одном хранится 1 - факт, что

В предыдущих выпусках мы разобрались, почему память компьютера может сохранять только два числа: 0 и 1.

Как хранить другие числа?

Один человек выпустил джинна из лампы. Джинн предложил исполнить три желания. Человек сразу же сказал – больше желаний! Джинн ответил – это запрещено. Недолго думая, человек сказал – больше джиннов!

Это и есть решение. Если элемент памяти не может записать больше чисел, значит нужно взять больше элементов.

Может быть, вы не обращали внимания, но обычные числа 10, 100, 1000 построены именно так.

Древнейший способ счета - 10 пальцев на руках. Это элемент памяти, в котором, загибая пальцы, можно сохранить числа от 0 до 10. Но нельзя сохранить 11, 12 и далее.

Тогда, сосчитав до 10, можно позвать друга и попросить его загнуть один палец. То есть друг запомнит, что вы один раз досчитали до десяти.

Но ведь вы только что добавили еще один элемент памяти. Запись 10 означает буквально следующее: есть ДВА элемента памяти (ваш друг и вы). В одном хранится 1 - факт, что вы посчитали до десятка 1 раз. В другом хранится 0 - можно считать заново.

Когда вы досчитаете десять раз до 10, друг тоже загнет все пальцы, и придется добавлять еще один элемент памяти, то есть звать еще одного друга, и так далее.

То же самое происходит с элементами компьютерной памяти, но у них есть только 1 палец. И получается, что загнув всего один палец, для следущего шага уже нужно "звать друга".

Вот один элемент компьютерной памяти в виде крохотного выключателя. Мы можем записать в него 0, 1, а 2 уже не можем. Чтобы сохранить 2, добавим еще один выключатель (старший), и запишем в него 1. А младший обнулим.

Из двух выключателей получилось 10. Это значит, что мы досчитали до 2 один раз и больше не считали. Общая сумма этих двух выключателей: 2*1 + 0 = 2.

-2

Внимание: мы видим 10, но это не физическое количество "десять". Это состояние двух элементов памяти: один в состоянии 1 и один в состоянии 0. А физическое количество, которое хранится в этом состоянии, равно 2.

Продолжим счет. Младший выключатель увеличивается на 1. Теперь выключатели показывают 11, это значит, что мы досчитали до 2 один раз и добавили 1. Итого получается 2*1 + 1 = 3.

-3

Продолжаем считать. В младшем уже хранится 1, и если мы добавим еще 1, получится, что мы снова досчитали до 2. Значит, надо увеличить старший на 1, чтобы запомнить этот факт.

Но в старшем выключателе уже записано 1, и нельзя записать туда 2. Значит, добавим еще один старший выключатель, и запишем туда 1, а младшие выключатели обнулим.

-4

Теперь есть уже три выключателя, которые показывают 100, это значит, что мы досчитали до 2*2 один раз и больше пока ничего не считали. Общая сумма равна 2*2*1 + 2*0 + 1*0 = 4.

Увеличиваем младший выключатель на 1 и получаем 101. Это значит, что мы досчитали до 2*2 один раз и добавили один. Общая сумма равна 2*2*1 + 2*0 + 1*1 = 5.

Продолжаем по той же схеме:

110 = 4*1 + 2*1 + 1*0 = 6
111 = 4*1 + 2*1 + 1*1 = 7
1000 = 8*1 + 4*0 + 2*0 + 1*0 = 8
1001 = 8*1 + 4*0 + 2*0 + 1*1 = 9
1010 = 8*1 + 4*0 + 2*1 + 1*0 =10
1011 = 8*1 + 4*0 + 2*1 + 1*1 = 11
1100 = 8*1 + 4*1 + 2*0 + 1*0 =12
1101 = 8*1 + 4*1 + 2*0 + 1*1 = 13
1110 = 8*1 + 4*1 + 2*1 + 1*0 = 14
1111 = 8*1 + 4*1 + 2*1 + 1*1 = 15
10000 = 16*1 + 8*0 + 4*0 + 2*0 + 1*0 = 16

То есть каждый раз, когда все переключатели полностью заполнены, слева добавляем еще один и записываем в него факт полного заполнения, после чего обнуляем младшие переключатели и начинаем все сначала.

Вы только что изучили двоичную систему. Именно она используется в компьютерах для хранения информации.

Если она кажется сложней нашей привычной десятичной, то замечу, что разницы нет вообще никакой, кроме количества цифр.

В двоичной системе мы считаем так же, как в десятичной, только отсчитываются не десятки, а двойки. В десятичной системе один переключатель может принимать значения 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, а в двоичной – только 0 и 1. Поэтому в двоичной системе всего-навсего требуется больше переключателей, чтобы записать то же самое число.

Например, вот некоторое физическое количество звездочек:

* * * * * * * * * * * * * * * *

В десятичной системе оно записывается как 16 – 1 раз досчитать до 10 и добавить 6 единиц.

Оно же в двоичной системе записывается как 10000 – 1 раз досчитать до 2*2*2*2, 0 раз до 2*2*2, 0 раз до 2*2, 0 раз до 2 и добавить 0 единиц.

В десятичной системе для записи числа 16 требуется 2 переключателя, которые могут хранить от 0 до 9, а в двоичной – 5 переключателей, которые могут хранить 0 или 1.

Вот и вся разница.

Мы вплотную приблизились к тому, чтобы начать программировать. В следующих выпусках я расскажу про различные структуры хранения данных в компьютерной памяти и отвечу на вопрос: числа это хорошо, но как сохранить красный цвет или круглую форму?

Читайте дальше: