Наконец, мы выпишем все единички в ряд и получим ответ: 111111111111111. Складывать и перемножать числа в единичной системе счисления существенно проще, чем десятичные или римские числа[30].
Разумеется, такая простота вычислений дается ценой титанических затрат внимания и времени. Никому не захочется прибегать к этому методу, чтобы перемножить 47 и 924.
Числа, записанные в двоичной системе счисления[31], не так привычны нам, как десятичные или римские, но с ними проще делать вычисления. Вот почему в компьютерах используется именно двоичная система. Чтобы разобраться, как она устроена, нам нужно припомнить особенности десятичной системы.
Для записи чисел в десятичной системе счисления используют десять символов, располагаемых в разных комбинациях в ряд по горизонтали. Значение символа зависит от его места в ряду. 29 и 92 означают разные числа, потому что 2 и 9 занимают разные позиции. 29 означает «два десятка и девять единиц». 5804 означает «пять тысяч, восемь сотен, ни одного десятка и четыре единицы». Позиция цифры в десятичном числе означает, на какую степень десяти[32] мы ее умножаем. Разряды растут справа налево: единицы, десятки, сотни, тысячи, десятки тысяч и т. д. Иными словами, запись 5804 означает:
5 × 10³ + 8 × 10² + 0 × 101 + 4 × 100.
Чем больше символов в десятичном числе, тем труднее его прочесть. Обычно каждый четвертый разряд отделяют пробелом или запятой[33].
Двоичная система устроена схожим образом, просто позиция в записи означает, на какую степень двух (а не десяти) мы должны умножить эту конкретную цифру.
В двоичной системе счисления используются всего два символа: 0 и 1. Разряды здесь тоже растут справа налево, обозначая количество единиц, двоек, четверок, восьмерок и т. д. Например, в двоичной записи 10110 означает:
1 × 2⁴ + 0 × 2³ + 1 × 2² + 1 × 21 + 0 × 20 = 16 + 4 + 2 = 22.
Проверьте, насколько вы ориентируетесь в новой теме: чему равно число 42 в двоичной системе и чему равно число 110112 в десятичной[34]? Ответы – в конце главы.
Двоичные числа труднее для чтения, чем десятичные. Двоичная запись 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.
В десятичной системе мы можем записывать не только целые числа. Если поставить в конце запятую[35], мы получим новые места для цифр: по мере движения вправо степени десяти будут все меньше. Например, 34,27 – это компактный способ записи такого выражения:
Двоичная система тоже позволяет записывать дробные значения. Каждую следующую цифру после запятой[36] мы умножаем на предыдущую степень двойки. Например, 101,0112 означает:
Непривычный способ записать одну вторую: 0,12!
Есть и другие системы счисления, помимо десятичной, единичной и двоичной[37]. В третичной системе мы пользуемся цифрами 0, 1 и 2, здесь все строится на степенях тройки. Скажем, 11023 означает:
1 × 27 + 1 × 9 + 0 × 3 + 2 × 1 = 38.
В дробях первая позиция справа от запятой означает умножение на одну третью, вторая позиция – на одну девятую и т. д.:
Если представить 42 в виде суммы степеней двойки, мы увидим, что это 1010102. А число 110112 можно представить как 16 + 8 + 2 + 1 = 27.
Глава 30,99999999999…
Безусловно, простейший способ записать число один – это цифра 1. Но вы можете столкнуться с тем фактом, что уходящая в бесконечность десятичная дробь 0,999999… представляет собой другой способ записи того же числа. В главе 3 мы присмотримся к этому обстоятельству повнимательнее.
Привычная нам десятичная система счисления удобна и работает отменно, почти без перебоев. Она хорошо подходит для записи целых чисел. 235 – это компактный способ сказать «две сотни, три десятка и пять единиц». Или, на языке математики:
235 = 2 × 100 + 3 × 10 + 5 × 1.
Для некоторых дробных величин десятичная система счисления также чрезвычайно эффективна. Возьмем число 3/4. В десятичной системе его можно записать так: 0,75. Эта запись означает:
Десятичная дробь 0,75 в точности равна 3/4.
Тем не менее если мы предпримем попытку записать 2/7 в виде десятичной дроби, то потерпим фиаско. Если мы попробуем разделить два на семь с помощью калькулятора, то получим неприглядное 0,28571429, причем это будет лишь приближенное значение, не равное в точности 2/7.
Такие числа, как 3/8, могут быть представлены в виде десятичной дроби, потому что знаменатель в них легко представить в виде одной из степеней десятки: 3/8 = 375/1000. Но нельзя найти целое число A, для которого выполнялось бы условие:
так как это подразумевает 2 × 10ⁿ = 7 × A. Ни одно целое число A не подходит в качестве решения уравнения, потому что левая сторона не делится на 7, а правая сторона делится. Представить 2/7 в качестве десятичной дроби невозможно. Если только не…
Идея десятичной дроби с бесконечным числом символов содержит в себе один подвох, и сейчас мы выясним, какой именно. Вернемся к началу главы: что означает 0,99999… и почему оно равно 1?
Для начала давайте представим 0,999999… не как одно число, а как ряд чисел, где каждое следующее – это предыдущее с приделанной справа цифрой 9. Вот как выглядит такой ряд:
0,9 0,99 0,999 0,9999 … (*)
и так далее ad infinitum[38]. Ясно, что элементы ряда (*) постоянно возрастают. Каждый следующий элемент пусть ненамного, но больше предыдущего.
Докажем два факта:
1. Все элементы возрастающего ряда (*) меньше 1.
2. Тем не менее для любого числа x, которое меньше 1, рано или поздно отыщется элемент ряда (*), превышающий x.
Представим элементы ряда (*) в виде обыкновенных дробей:
Есть компактный способ записать эти дроби. Знаменатели представляют собой степени десяти: 101, 10², 10³ и т. д. Каждый числитель на единицу меньше соответствующего ему знаменателя. Перепишем ряд снова:
Очевидно, что