Как компьютер из бесконечного потока нулей и единиц отделяет одни значения от других? Ведь в двоичной системе нет знаков препинания

442
1
3
27 ноября
17:52
ноябрь
2015

Компьютер отделяет так, как ему предписывает отделять программа, которую написал человек.

Когда разрабатывается программа, программист решает, какой способ хранения информации в памяти (или на диске) ему удобнее всего. Для этого существует несколько широко распространённых форматов. Есть стандартные форматы для работы с целыми числами, дробными числами, с наборами чисел, строками и др.

Для примера давайте сперва взглянем на то, как устроено наиболее типичное целое число. Целое число - это ровно 32 бита (нулей и единиц). То есть, если, допустим, программист записывает в память поочерёдно 4 целых числа, то в памяти оказывается 128 (32х4) бит полезной информации. Но мы всегда знаем, что биты с 1-го по 32-й - это первое число, с 33-го по 64-й - это 2-е число и так далее. Так что они не перепутаются.

Вторым примером давайте разберём самый типичный вариант "строки". Строкой называется последовательность бит, в которой каждый символ занимает ровно 8 бит. В этих 8 битах могут быть закодированы буквы, цифры, знак пробела, знаки препинания и разные другие значки. Чтобы хранить символы в виде чисел (поскольку нули и единицы - это числа), был придуман стандарт, по которому, допустим (в реальности это немного не так), число 1 означает букву "А", число 2 означает "Б" и так далее. 8 бит как раз достаточно для того, чтобы хранить основной набор символов.

Строка представляет собой последовательность отдельных символов. Так же, как и с числами, здесь 1-8й биты - это первый символ, 9-16й биты - второй и т. д. Чтобы знать, когда строка заканчивается, существует 2 распространённых подхода. Первый подход заключается в том, чтобы самым первым "символом" строки записать не первый символ, а число, которое равно числу символов в этой строке. Благодаря этому числу программист знает, где заканчивается строка и начинается что-то другое (например, другая строка или же, допустим, какое-нибудь другое нужное число). Другой подход заключается в том, что строка всегда заканчивается числом ноль. Ноль - это знак "конец строки". При таком подходе программа читает символ за символом (по 8 бит) до тех пор, пока не встретится ноль (не путайте число 0, которое записывается в памяти как 00000000 и символ, обозначающий ноль, который записывается как 00110000). Как встретился ноль - значит, дальше уже не строка, а что-то другое.

P. S. В современном программировании почти всеми такими нюансами занимается сам компьютер. То есть, программисту очень редко нужно запоминать, в каком порядке он записывает числа, не нужно мучаться с посимвольным чтением строки в поисках нуля и т. п. Он пишет и видит свою программу в виде довольно приятного построчного текста, где каждому числу, строке (и др.), с которыми ему нужно работать, он назначает имя (например, tekstVoprosa, tekstOtveta, reytingOtveta или чаще по-английски questionText, answerText, answerRaiting) и далее использует это имя. Он может, например, записывать/читать на/с диск-а и не задумываться обо всех этих битах. Компьютер сам проследит, чтобы были записаны правильные биты в правильном порядке.

4
0
Если вы знаете ответ на этот вопрос и можете аргументированно его обосновать, не стесняйтесь высказаться
Ответить самому
Выбрать эксперта