Двоичная система счисления

двоичные цифры

Однажды в Риме


Древних римлян часто поминают дурным словом за их громоздкую систему записи чисел. Люди не любят римские числа, так как они обременяют вычисления. Никто не обрадуется перспективе перемножать XLVII и DCDXXIV. А вот задача умножить 47 на 924 не выглядит настолько угрожающей (хотя большинство из нас все равно побежит за калькулятором). Впрочем, прежде чем сбрасывать римские числа со счетов как причудливый анахронизм, нам необходимо признать, что их основополагающий принцип – буквы вместо цифр – используется до сих пор. Этот ключевой аспект римских чисел обрел новое воплощение. Что легче прочесть?
 
• Реновация школ в нашем округе обойдется в 23000000 долларов
• Реновация школ в нашем округе обойдется в 23 млн долларов
 
Разумеется, я не стал разделять разряды в первом случае, чтобы число было сложнее прочесть (и я попал в точку, не правда ли?). Но, даже если проставить пробелы, фраза «Пентагон требует дополнительные 19 000 000 000 долларов» сложнее для восприятия, чем «Пентагон требует дополнительные 19 млрд долларов». Иногда удобнее использовать слова вместо чисел.
 
Мнимое преимущество позиционной системы счисления (это такая система счисления, в которой значение каждого символа в записи числа зависит от его позиции/разряда) – это то, что в ней проще производить вычисления. Но давайте задумаемся о том, сколько сил уходит на перемножение двух чисел. Во-первых, нам необходимо запоминать дополнительные математические данные. К тому же мы обязаны помнить таблицу умножения. Во-вторых, мы проделываем многоуровневую процедуру: сортируем числа по разрядам, умножаем по соответствующему правилу, получаем промежуточные данные, складываем.
Да, десятичные числа легче перемножать, чем их римские аналоги, однако это по-прежнему утомительно. Возникает вопрос, есть ли способ записывать числа, который бы облегчал вычисления. Мы выяснили, что да, есть, но для этого придется пожертвовать наглядностью.
 
Единичная система счисления

Простейший способ записи чисел – единичная система счисления: мы просто записываем столько же символов (будем использовать цифру 1), сколько единиц в интересующем нас числе. Например, число 3 окажется трехзначным: 111. Сложение и умножение становятся исключительно простыми. Чтобы сложить 3 и 5, мы просто запишем два числа, 111 и 11111, друг за другом (без пробела) – и вот он, ответ: 11111111. Умножать тоже просто. Мы запишем одно число вертикально, а другое горизонтально и получим следующую таблицу:

единичная система счисления
Затем мы заполним таблицу, поставив единичку в каждом столбце и в каждой колонке:

единицы

Наконец, мы выпишем все единички в ряд и получим ответ: 111111111111111. Складывать и перемножать числа в единичной системе счисления существенно проще, чем десятичные или римские числа. Разумеется, такая простота вычислений дается ценой титанических затрат внимания и времени. Никому не захочется прибегать к этому методу, чтобы перемножить 47 и 924.

Компромисс

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

Для записи чисел в десятичной системе счисления используют десять символов, располагаемых в разных комбинациях в ряд по горизонтали. Значение символа зависит от его места в ряду. 29 и 92 означают разные числа, потому что 2 и 9 занимают разные позиции. 29 означает «два десятка и девять единиц». 5804 означает «пять тысяч, восемь сотен, ни одного десятка и четыре единицы». Позиция цифры в десятичном числе означает, на какую степень десяти мы ее умножаем. Напомним, что показатель степени означает, сколько раз мы перемножаем основание: например, 10³ = 10 × 10 × 10. Естественно, 101 = 10. По договоренности, 100 = 1. Это логично, так как каждая следующая степень десяти в десять раз больше предыдущей. Разряды растут справа налево: единицы, десятки, сотни, тысячи, десятки тысяч и т. д. Иными словами, запись 5804 означает:
 
5 × 10³ + 8 × 10² + 0 × 101 + 4 × 100
 
Чем больше символов в десятичном числе, тем труднее его прочесть. Обычно каждый четвертый разряд отделяют пробелом или запятой. В англоязычных странах в качестве разделителя разрядов используется запятая, в России – неразрывный пробел, который ставится только в числах с пятью и более разрядами. Двоичная система устроена схожим образом, просто позиция в записи означает, на какую степень двух (а не десяти) мы должны умножить эту конкретную цифру. В двоичной системе счисления используются всего два символа: 0 и 1. Разряды здесь тоже растут справа налево, обозначая количество единиц, двоек, четверок, восьмерок и т. д. Например, в двоичной записи 10110 означает:

1 × 2⁴ + 0 × 2³ + 1 × 2² + 1 × 21 + 0 × 20 = 16 + 4 + 2 = 22
 
Проверьте, насколько вы ориентируетесь в новой теме: чему равно число 42 в двоичной системе и чему равно число 110112 в десятичной? (чтобы отличить запись в двоичной системе от записи в десятичной, мы будем ставить нижний индекс: 11012 или 110110).

Вычисления

Двоичные числа труднее для чтения, чем десятичные. Двоичная запись 1011001 кажется менее привычной, чем десятичная запись того же числа: 89. Преимущество двоичных чисел в том, что их использование облегчает вычисления. Вместо огромного количества математических данных нам необходимы всего две таблицы:
 

 
Заметьте, что в таблице умножения 10 означает число два. Сложение двоичных чисел устроено так же, как в десятичной системе. Например, нам нужно найти сумму 101002 и 11102. Расположим эти числа друг над другом:
 
 
Дальше нужно двигаться справа налево, складывая цифры в каждом столбце и при необходимости перемещая единицу на столбец влево. В нашем случае мы сложим два нуля и получим ноль:



Дальше идет столбец двоек. Мы складываем 1 и 0 (переносить ничего не требуется):



Дальше – столбец четверок. Мы складываем 1 и 1, получаем 10, пишем 0, держим 1 в уме и переносим на столбец влево:

Следующий столбец – восьмерки. Складываем 1 и 0 и 1, получаем 10, пишем 0 и держим 1 в уме:



Заканчиваем на столбце, означающем, сколько раз в числе встречается 16. Сложение дает 10, мы пишем 0 в текущем столбце и 1 в столбце с разрядом 32:



Мы обнаружили, что 10100 + 1110 = 100010.
 
Переведем это на язык десятичных чисел:
 
101002 = 20, 11102 = 14, 1000102 = 34.
 
Разумеется, 20 + 14 = 34.
 
Умножение в двоичной системе проще, чем в десятичной. Достаточно усвоить два принципа: сложение двоичных чисел (мы в нем только что разобрались) и умножение на степени двойки.
Умножение числа на 10 в десятичной системе не представляет сложности: мы просто добавляем цифру 0 справа: 23 × 10 = 230. Точно так же выглядит умножение на 2 в двоичной системе: 1101 × 10 = 11010. В случае десятичных чисел это очевидно, в случае двоичных 1101 означает:

1 × 8 + 1 × 4 + 0 × 2 + 1 × 1.
 
Умножение на 2:
 
1 × 16 + 1 × 8 + 0 × 4 + 1 × 2 + 0 × 1
 
Лишний ноль на конце дает 11010.
 
Умножение на 4, 8 и другие степени двойки тоже просто: например, умножение на 810 (10002) равнозначно приращению трех нулей с правой стороны числа. Итак, умножение превращается в игру «перемести-и-добавь-цифры». Проиллюстрируем это на примере умножения 11010 на 1011. Для начала запишем второе число так:

1011 = 1000 + 10 + 1.

Умножение на 11010 можно представить так:
 
11010 × 1011 = 11010 × (1000 + 10 + 1) = 11010 × 1000 + 11010 × 10 + 11010 × 1 = 11010000 + 110100 + 11010.
 
Удобнее умножать в столбик:

умножение двоичных чисел

А вот и ответ:



Давайте переведем числа в десятичные, чтобы удостовериться, что все правильно:
 
110102 = 16 + 8 + 2 = 26;
10112 = 8 + 2 + 1 = 11;
1000111102 = 256 + 16 + 8 + 4 + 2 = 286.
 
Мы не ошиблись: 26 × 11 = 286.

Дроби

В десятичной системе мы можем записывать не только целые числа. Если поставить в конце запятую, мы получим новые места для цифр: по мере движения вправо степени десяти будут все меньше. Например, 34,27 – это компактный способ записи такого выражения:



Двоичная система тоже позволяет записывать дробные значения. Каждую следующую цифру после запятой (в случае с двоичной системой неправильно говорить «десятичная запятая», лучше называть ее двоичной запятой, или запятой в позиционном представлении числа) мы умножаем на предыдущую степень двойки. Например, 101,0112 означает:



Непривычный способ записать одну вторую: 0,12! Есть и другие системы счисления, помимо десятичной, единичной и двоичной. Программисты нередко пользуются шестнадцатеричной системой счисления. В десятичной системе 10 цифр (от 0 до 9), в шестнадцатеричной нам нужно 16 разных символов, поэтому числа от 10 до 15 обозначают с помощью букв от A до F. В третичной системе мы пользуемся цифрами 0, 1 и 2, здесь все строится на степенях тройки. Скажем, 11023 означает:
 
1 × 27 + 1 × 9 + 0 × 3 + 2 × 1 = 38
 
В дробях первая позиция справа от запятой означает умножение на одну третью, вторая позиция – на одну девятую и т. д.:
 

Ответ на задачу 

Если представить 42 в виде суммы степеней двойки, мы увидим, что это 1010102. А число 110112 можно представить как 16 + 8 + 2 + 1 = 27.

«Человеческий зародыш, чувства которого находятся на уровне амёбы, пользуется значительно большим уважением и правовой защитой, чем взрослый шимпанзе. Между тем шимпанзе чувствует и думает, и возможно - согласно новейшим экспериментальным данным - способен даже освоить какую-то форму человеческого языка»

Ричард Докинз

Файлы

Фейнмановские лекции по физике

Забавное евангелие

Интеллектуальные уловки

Маркс, Энгельс и Ленин о науке и технике