В последнее время стало совсем мало времени у меня. Надеюсь, скоро что-нибудь опять существенное напишу, но пока не успеваю. Этот короткий текст — продолжение главы учебника о натуральных числах, довольно долго пылившийся в черновиках. Здесь совсем всё просто и банально, но опять же избежать этого рассказа я никак не могу. Как всегда я призываю всех читать не веб, а pdf.
После того как мы определили понятие натурального числа, встаёт вопрос о том, как натуральные числа записывать. Пока мы ввели только символы 0, 1, 2, 3 и 4 для нескольких чисел. Мы могли бы продолжить процесс и дальше (пока продолжим этот ряд последовательно символами 5, 6, 7, 8, 9, A), однако довольно быстро возникает проблема: множество Image may be NSFW.
Clik here to view. бесконечное, и соответственно символов нам потребуется бесконечно много, что, видимо, невозможно. Нам нужен способ, который позволит записывать любое натуральные число используя конечное число символов.
Пусть у нас есть некоторое число Image may be NSFW.
Clik here to view., которое надо записать. Выберем некоторое произвольное Image may be NSFW.
Clik here to view., которое будем называть основанием нашей системы счисления и поделим одно на другое с остатком:
(1) Image may be NSFW.
Clik here to view.
Здесь Image may be NSFW.
Clik here to view. и Image may be NSFW.
Clik here to view.. Поделим теперь на Image may be NSFW.
Clik here to view. с остатком значение Image may be NSFW.
Clik here to view.: Image may be NSFW.
Clik here to view. и подставим это выражение в (1):
(2) Image may be NSFW.
Clik here to view.
Аналогично можно представить Image may be NSFW.
Clik here to view. подставив его в (2), затем Image may be NSFW.
Clik here to view., Image may be NSFW.
Clik here to view. и так далее. Легко увидеть, что последовательность Image may be NSFW.
Clik here to view. с каждым следующим элементом убывает, и, стало быть, в какой-то момент найдётся такое Image may be NSFW.
Clik here to view., что Image may be NSFW.
Clik here to view.. На этом процесс прекратится и мы получим такое выражение для Image may be NSFW.
Clik here to view.:
Image may be NSFW.
Clik here to view.
В этом выражении важно то, что каждое из значений Image may be NSFW.
Clik here to view. оказывается меньше чем Image may be NSFW.
Clik here to view., и при этом набора Image may be NSFW.
Clik here to view. вполне достаточно для того, чтобы однозначно идентифицировать любое число. В этом и заключается основная идея позиционных систем счисления. Число Image may be NSFW.
Clik here to view. определяет количество символов, необходимых для представления числа в системе с основанием Image may be NSFW.
Clik here to view..
В компьютерах применяется так называемая двоичная система счисления, в которой Image may be NSFW.
Clik here to view. и используются лишь два символа для записи чисел: 0 и 1. Это обуслевлено тем, что на физическом уровне в вычислительных системах довольно просто отличить два принцпиально различных состояния друг от друга: есть напряжение в проводе/нет напряжения, луч отражается от диска под большим углом/под маленьким, сектор на диске намагничен/ненамагничен. И так далее. Возможно, конечно, и более детальное различение физичеких систем, например мы могли бы различать не просто наличие напряжения, но и его величину: слабое оно или сильное в дополнение к тому, если ли оно вообще. В этом случае Image may be NSFW.
Clik here to view. было бы равно трём, и иногда это действительно используется, но технически это часто осуществляется сложнее, поэтому почти всегда используется Image may be NSFW.
Clik here to view..
Рассмотрим пример. Как представить число Image may be NSFW.
Clik here to view. в двоичной системе? (Напомню, что за Image may be NSFW.
Clik here to view. мы обозначили число, следующее за числом 9). Проделывая процедуру с делением, описанную в начале параграфа, мы приходим к записи
Image may be NSFW.
Clik here to view.
Здесь Image may be NSFW.
Clik here to view.. Можно кратко записать это как упорядоченный набор: Image may be NSFW.
Clik here to view., или же даже еще короче, опустив скобки и запятые: 1010. Это и есть двоичное представления числа A. Чтобы не путать системы счисления, удобно так же обозначать основание рядом с числом. В нашем случае получится Image may be NSFW.
Clik here to view.. Впрочем, иногда нам будет удобно пользоваться и записью Image may be NSFW.
Clik here to view., так что следует иметь её ввиду, по крайней мере в течение ближайших нескольких параграфов. Количество символов, необходимых для представления числа, мы будем называть разрядностью, а выражение Image may be NSFW.
Clik here to view. Image may be NSFW.
Clik here to view.-ым разрядом. Иногда нам будет удобно считать, что число имеет больше разрядов чем необходимо, тогда старшие разряды будут иметь значение 0. Таким образом число Image may be NSFW.
Clik here to view. можно было бы эквивалентно записать как Image may be NSFW.
Clik here to view.. Потенциально мы можем считать, что слева в записи числа стоит бесконечное число нулей — это соображение часто упрощает рассуждения и мы будем пользоваться им ниже.
В повседневной жизни чаще всего применяется десятичная система счисления, в которой Image may be NSFW.
Clik here to view. и помимо 0 и 1 используются так же символы 2, 3, 4, 5, 6, 7, 8, 9. Рассмотрим, для примера, как представить число Image may be NSFW.
Clik here to view. в десятичной системе счисления. Повторяя еще раз процедуру деления с остатком, получаем:
Image may be NSFW.
Clik here to view.
Рассматривая этот пример, у вас могут возникнуть сомнения по поводу того, как я это вычислил. Ответ тут очень простой: я использовал инженерный калькулятор, который умеет работать с разными системами счисления. Впрочем, даже без калькулятора можно было бы удостовериться в верности данного выражения. Самый простой способ поделить Image may be NSFW.
Clik here to view. на Image may be NSFW.
Clik here to view. с остатком заключается в многократном вычитании Image may be NSFW.
Clik here to view. из Image may be NSFW.
Clik here to view. до тех пор, пока результат не окажется меньше Image may be NSFW.
Clik here to view.. Этот способ легко понять, но он крайне неэффективен: для его реализации вам потребуется уже не калькулятор, а полноценный компьютер. Тем не менее вычислить это возможно. Пока мы остановимся на этом способе и на самом факте того, что это можно как-то вычислить, а в следующем параграфе я продемонстрирую более эффективный способ деления с остатком, который позволит провести все вычисления используя лишь ручку и клочек бумажки.
Вездее далее, если не будет оговорено обратное, мы будем использовать десятичную систему счисления, при этом обозначать её мы не будем никак специально, то есть вместо Image may be NSFW.
Clik here to view. мы будем ограничиваться записью Image may be NSFW.
Clik here to view..
В качестве последнего примера рассмотрим шестнадцатеричную систему счисления (Image may be NSFW.
Clik here to view.), часто используемую программистами. В ней помимо символов десятичной системы применяются так же символы Image may be NSFW.
Clik here to view.. Рассмотрим пример того, как можно понять десятичное значение числа в шестнадцатеричной записи:
Image may be NSFW.
Clik here to view.
Причина, по которой программисты любят шестнадцатеричную систему счисления, заключается в том, что она очень легко переводится в двоичную систему счисления и обратно. По сути для этого надо знать лишь представление в двоичной системе 16-ти цифр. Для примера выше мы уже видели, что Image may be NSFW.
Clik here to view., так же легко увидеть, что Image may be NSFW.
Clik here to view. и Image may be NSFW.
Clik here to view.. Чтобы получить отсюда двоичную запись, достаточно объединить двоичные записи для отдельных шестнадцатеричных цифр: Image may be NSFW.
Clik here to view.
Возможность такого представления основывается на следующей несложной общей теореме (сложнее понять формулировку, чем доказать), доказательство которой мы оставим в качестве упражнения читателю (впрочем, я бы пока рекомендовал отложить это упражнение и вернуться к нему после прочтения следующего параграфа):
Теорема. Записи в системах счисления с основаниями Image may be NSFW.
Clik here to view. и Image may be NSFW.
Clik here to view. связаны следующим образом:
Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.
В компьютерной памяти чаще всего двоичные значения 0 и 1 (их называют битами) объединены в группы по восемь бит (число восемь берется из соображений, близких к только что упомянутой теореме). Такая группа бит называется байтом. Во многих системах один байт представляет собой один печатный символ. Если же рассматривать байт как число, что его значения могут варьироваться от 0 до 255 (всего 256 различных значений), и таким образом каждому символу можно сопоставить некоторое числовое значение. Всего у нас может быть максимум 256 символов.
Если рассматривать не один, а сразу последовательность байт, то их можно считать числом, записанном в 256-ричной системе счисления. Это часто применяется в компьютерах для записи больших чисел. Если рассматривать два байта, то их максимальным значением может быть 65535. Если считать за символ не один байт, а два байта, то это значит, что наша система сможет поддерживать 65535 символов, что хватит даже китайцам с несколькими их диалектам, Египтянам, латинянам и евреям. Если нам и этого мало, то можно рассматривать четырехбайные значения. В этом случае мы сможем записать число 4294967295, то есть четыре байта позволяют записывать девятизначные числа и некоторые десятизначные. С точки зрения символов мы сможем уместить сюда не только все распространенные в мире языки, но и все вымершие языки, смайлики, музыкальные обозначения, матемаетические знаки, несколько вариантов древней клинописи и так далее. Если нам и этого не хватит, то можно взять 8-байтные целые, которые позволят работать с 19-значными числами.
Если мы будет рассматривать текст как последовательность символов, то мы так же эту последовательность можем интерпретировать как некоторое большое число. Например, для кодирования английского текста чаще всего применяется стандарт ASCII, устанавливающий какой букве соответствует какое число. Букве F в нём соответствует число 70, а букве o — 111 (ASCII использует только 1 байт для кодирования символов). Как число слово Foo в ASCII можно представить следующим образом:
Image may be NSFW.
Clik here to view.
Подобное отношение к тексту позволяет применять к нему математические функции. Например, многие криптосистемы представляют собой всего лишь некоторые арифметические действия над числами и даже не догадываются о том, что пользователь рассматривает данные как текст. Самым ярким примером является криптосистема RSA, на которой сейчас построена значительная доля всей криптографии, используемой на практике, и которую мы рассмотрим в четвертой главе. Используя действия над числами можно так же сжимать данные, чтобы они занимали меньше места. Этот подход называется арифметическим кодированием и мы так же рассмотрим его в четвертой главе. В четвертом параграфе этой главы мы будем рассматривать математические формулы как обычный текст, который в свою очередь мы будем рассматривать как обычное число. Довольно неожиданным образом это позволит сделать нам фундаментальные выводы относительно всей математики в целом.