Двоичная система
Вернемся к "азбуке" информационной науки. Впрочем, азбука ли это? Ведь букв-то как раз здесь и нет, одни цифры – не зря же компьютерные технологии называют еще и "цифровыми". Да и цифр немного – всего две:
■ 0 – отсутствие сигнала;
■ 1 – его наличие.
Хорошая азбука, что и говорить! Такую даже первоклассник выучит за секунду. Да только мала – много ли слов составишь из ее "букв"? Немного. Но для компьютера – вполне достаточно. И как же по научному называется такая система счисления из двух цифр? Нетрудно догадаться, что двоичной.
Двоичная система счисления действительно очень простая, даже самая простая. Для подтверждения этой мысли представим таблицы умножения и сложения двоичной системы.
Сначала – таблица умножения.Если вспоминается таблица умножения десятичной системы, забудьте как страшный сон. Мало есть вещей, более простых, чем таблица умножения двоичной системы.
Какое в этой таблице самое сложное действие? Конечно, 1x1 = 1. Остальные ее действия – 0x0=0, 0x1=0, 1x0=0 – как говорят математики, абсолютно тривиальны.
Название таблицы сложения произошло, видимо, от слова "сложный". Таблица сложения двоичной системы не просто сложнее таблицы умножения. Она сложна по жизни. Точнее, камень преткновения составляет одно единственное действие, но на нем держится вся система и все компьютеры. Посмотрим на эту "страшную" таблицу сложения:
Вся суть этой таблицы – в ее самом сложном действии: 1 + 1 = 102 "один-ноль". Остальные действия не представляют для нас никакой угрозы: 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1. А что это за индекс "два" у числа 102? Индекс два пришлось записать в этом числе, чтобы обозначить, что оно записано в двоичной системе счисления. Да, число 102 вовсе не равно десяти в "школьной" десятичной системе. Хотя и пишется как десять с индексом два. Здесь как раз тот самый случай: наш язык десятичный, и называть адекватно числа в других системах он не может.
Какое же количество обозначает это число 102? Давайте посчитаем. Оно получено сложением двух единиц, и поэтому обозначает количество два. Только записано оно в двоичной системе. А что прикажете делать? Ведь у двоичной системы в арсенале всего две цифры: 0 да 1. И как тогда обозначить число, следующее за 1? А как обозначается число в десятичной системе, которое следует сразу за самой большой цифрой 9? Вот точно так же и в двоичной системе. Только с двоечкой внизу.
Другими словами, 102 = 210: "один-ноль" в двоичной системе равно двум в десятичной. Ах, язык, язык… Обратите внимание: основание системы счисления справа внизу у чисел пишется всегда в десятичной системе!
Для тренировки выпишем первые двоичные числа от 0 до 16. Воспользуемся при этом основным свойством чисел: следующее число больше предыдущего на 1.
0 и 1 можно писать без указания системы счисления: 0 и 1 и в Африке 0 и 1.
Самый эффективный способ получить следующее число – это прибавить один столбиком. Да, да, тем самым "школьным" столбиком. Он прекрасно "работает" в любых системах счисления. Сначала получим:
1 + 1 = 102 (называется не "десять", а "один-ноль", то есть перечисляются названия цифр слева направо);
102 + 1 = 112 ("один-один");
112 + 1 = 1002 ("один-ноль-ноль") и так далее.
Как нетрудно заметить, главное в этом деле – все время помнить, что один да один будет не два, а "один-ноль". Нуль пишем, один в уме…
Следует иметь в виду: заложенная в русский язык десятичная система ни в коем случае не должна использоваться для называния чисел в других системах.
Если продолжить это увлекательное занятие, то получится следующая таблица с первыми 16 двоичными (и десятичными) числами, не считая нуля.
Теперь, имея такую чудную таблицу, займемся важным делом: подсчитаем, сколько же разных слов можно составить из наших цифровых "букв". То есть снова посчитаем количество чисел с одинаковым количеством цифр, но уже в двоичной системе счисления. Только не запутайтесь: подсчет будем вести в десятичной системе.
Итак, изучая эту таблицу, получаем:
■ 2 однозначных двоичных числа 0 и 1;
■ 4 = 22 двузначных двоичных числа: 00, 01, 102 и 112;
■ 8 = 23 трехзначных двоичных чисел от 000 до 1112;
■ 16 = 24 четырехзначных двоичных чисел от 0000 до 11112.
Уф! Дело сделано. Позволим себе рассуждать по аналогии и, учитывая подобный опыт подсчета количества таких чисел для десятичной системы, получим уникальную таблицу количества всех двоичных чисел, имеющих один знак, два знака, три знака и так далее до десяти знаков.
Единицы компьютерной информации. Биты и байты
Имеют ли "слова", составленные из двоичных цифровых "букв", какие-то специальные названия? Имеют, и весьма значимые.
"Слова", составленные из одной "буквы" – однозначные числа – называются битами. Бит может принимать только два значения – 0 и 1. Бит можно представить как выбор ответа "да" или "нет" на поставленный вопрос. Электронным представлением бита на компьютере является ситуация "есть сигнал / нет сигнала". В математических науках и информатике ответ "да" обычно обозначается цифрой 1, "нет" – цифрой 0. Одним битом можно закодировать два объекта.
"Слова", состоящие из восьми "букв", то есть восьмизначные двоичные числа, называются байтами. Восьмерка здесь присутствует не случайно: это первое мистическое компьютерное число. Откуда взялась в байте именно цифра 8, никто не знает (может быть, по количеству колонн Большого театра в Москве?). Но эта цифра постоянно буквально путается под ногами у компьютера. Позволю себе процитировать по этому поводу очень серьезную книгу американских специалистов, изданную ими в 1985 г.:
"Число битов, необходимых для кодирования символа в конкретной вычислительной машине, называется размером байта, а группа битов в этом числе называется байтом. Размер байта в большинстве ЭВМ равен 8" (выделение авторов).
То есть размер байта 8 бит устоялся в основном как оптимальный с точки зрения кодирования символов.
Примерами восьмизначных компьютерных "слов" – байтов можно записать следующие числа:
00001111 10101000 10001111 10000110 01010101 и так далее.
В каком же диапазоне изменяются наши 256 байтов? Очевидно, что от 0000 0000 до 1111 1111, при переводе в десятичную систему от 0 до 255.
Не путайте биты с байтами! Бит состоит из одной двоичной цифры, и разных битов всего два: 0 и 1. Байт содержит ровно восемь цифр, не больше и не меньше. А сколько всего имеется разных байтов? Это легко выяснить из предыдущей таблицы: 256.
Получили второе мистическое компьютерное число – 256. Компьютер все время работает с байтами, обычно ими легче оперировать. Но по мере развития прогресса компьютеры становились все мощнее и мощнее, все мозговитее и мозговитее. Байтов в них становилось все больше и больше. Сейчас их уже так много, что разработана целая система так называемых производных единиц от байта.
Короче, сначала придумали третье компьютерное число, равное 2 = 1024. Почему такое? Очень просто. Во-первых, круглая степень – 10. Во-вторых, 1024 почему-то почти равно 1000. А 1000 – это основание для обычных производных единиц: 1 километр равен 1000 метров, 1 килограмм равен 1000 граммов. Дело даже дошло до того, что один немецкий компьютерный журнал поместил изображение 1 киломарки, равной 1024 маркам…
Затем постановили, что 1024 байта равны 1 – правильно! – килобайту.А 1024 килобайта равны 1 мегабайту,и так далее. Все имеющиеся производные единицы байта находятся в следующей таблице.
Только будьте внимательны при использовании производных единиц! Полностью их имена пишутся с маленькой буквы, а сокращенно – с большой (но байт сокращается до маленькой буквы).
■ 1 килобайт = 1 кб = 1 К = 210 б;
■ 1 мегабайт = 1 Мб = 1 М = 210 К = 220 б;
■ 1 гигабайт = 1 Гб = 1 Г = 210 М = 220 К = 230 б.
Как же перевести число из привычной нам десятичной системы в двоичную?
Проще всего – с помощью инженерного калькулятора. Если же такового под рукой не окажется, можно произвести это преобразование с помощью обычной бумаги и карандаша. Наиболее известный и простой способ перевода из десятичной системы в двоичную производится в десятичной системе путем деления на 2 – на основание двоичной системы. Приведем алгоритм перевода чисел из десятичной системы в двоичную, состоящий из двух шагов.
Число в десятичной системе делится на 2. Получаем частное и остаток. Частное снова делится на 2. Снова получаем частное и остаток. Опять делим новое частное на 2 и так далее. Остатки от деления – цифры 0 и 1 – являются цифрами соответствующего двоичного числа, записанными справа налево.
Процесс деления прекращается, когда частное становится равным нулю. В первом случае (а) у нас 2010 = 101002. Во втором случае (б) получается 3010 = 111102.