Компьютеры изобрели достаточно давно. В те далекие времена электроника только начинала зарождаться, поэтому первые компьютеры были ламповыми и занимали очень много места. Для того чтобы управлять такой махиной, нужно было очень много обслуживающего персонала. Со временем лампы начали вытесняться электронными компонентами, и компьютеры стали уменьшаться в размерах. Сейчас же мы видим результат прогресса и на наших рабочих столах находятся небольшие системные блоки, которые занимают мало места, а по производительности могут обойти серверы 5—10-летней давности.
В конце 1990-х годов я работал на большом предприятии, на котором сохранились компьютеры 1970-х годов. Это были шкафы (в прямом смысле этого слова), произведенные в Советском Союзе. Вы помните, что была такая страна? Так вот, в то время у меня дома стоял Pentium 100, который был в сто раз меньше и в тысячу раз быстрее.
Однако основные принципы работы компьютера, заложенные во времена их рождения, действуют до сих пор.
Суть их заключается в следующем. Данные передаются с помощью какого-то сигнала (для нас не имеет значения какого, потому что мы не электронщики) методом "есть сигнал или нет" или, по-другому, "включен или выключен". Так появился "бит" (bit). Бит— это единица информации, которая может принимать значение 0 или 1, т. е. "включен или выключен". Восемь бит объединяются в байт, один байт равен 8 битам. Почему именно 8? Да потому что первые компьютеры были восьмиразрядными и могли работать одновременно только с 8 разрядами (битами), например, 010000111.
Все первые нули можно удалять, поэтому число 010000111 можно записать как— 10000111. Это то же самое, что и в привычной для нас десятичной системе исчисления, где каждый разряд может принимать значения от 0 до 9. Здесь также
никто не будет писать число 5743 как 0005743, потому что первые нули не имеют никакого значения.
В один байт можно записать любое число от 0 до 255. Почему? Об этом немного позже. Указанный диапазон чисел довольно мал. Поэтому чаще используют более крупные градации:
- два байта = слово;
- два слова = двойное слово.
Итак, компьютер стал работать в двоичной системе исчисления. Но как же тогда записать число 135, если у нас единица информации может принимать значения 0 или 1? Это можно сделать в двоичной системе. Давайте разберемся, как это работает.
Для начала вспомним, как действует десятичная система исчисления, к которой мы привыкли. Для этого рассмотрим число 19 578 246. Я специально выбрал такое число, чтобы оно состояло из восьми разрядов (цифр). Теперь запишем его, как показано на рис. 1.1.
Рис. 1.1. Число 19 578 246 в десятичной системе исчисления
Как видите, я пронумеровал разряды начиная с нуля до семи и справа налево. Теперь представьте себе, что это не целое число, а просто набор разрядов. 1, 9, 5, 7, 8, 2, 4 и 6. Как из этих разрядов получить целое число в десятичной системе? Наверное, некоторые скажут, что надо просто записать их подряд. А если я спрошу почему? Вот тут появляется математика. Нужно каждый разряд умножить на 10 (степень исчисления), возведенную в степень номера разряда. Непонятно? Попробую оформить сказанное в виде формулы, показанной на рис. 1.2.
Рис. 1.2. Работа с десятичными числами
Давайте посчитаем значение числа по этой формуле начиная с нулевого разряда. Получается, что 6 нужно умножить на 10 в нулевой степени 6 х 10° = 6. Потом прибавить 4 х 10 в 1-й степени, или 4 х 101 = 40 (итого уже 46). Потом 2 х 10 во 2-й степени, 2 х 102 = 200 (итого 246). Потом 8 х 10 в 3-й степени, 8 х 103 = 8000 (итого 8246) и т. д. В итоге получится число 19 578 246. Магия чисел? Нет, это просто математика, и в школе далеко не всегда нам показывают, что означает десятичная система исчисления, а ведь она достаточно проста.
А теперь рассмотрим двоичную систему исчисления. Здесь каждый* разряд может принимать значение 0 или 1 (два состояния). Кстати, в десятичной системе у нас каждый разряд мог принимать значения от 0 до 9, т. е. имел десять состояний.
Давайте рассмотрим следующий байт— 10000111. Запишем его на листке бумаги так, как показано на рис. 1.3.
Рис. 1.3. Двоичное число
Здесь действует та же самая формула, только нужно возводить в степень не 10, а число 2, потому что это число в двоичной системе.
Опять же произведем расчет начиная с нулевого разряда, т. е. справа налево. Получается, что первую 1 мы должны умножить на 2 в нулевой степени (1 х 2° = 1).
Следующую единицу нужно умножить на 21, получается 2 (итого 2 + 1 = 3) и т. д. Вот как это будет выглядеть полностью:
(1 х 2°) + (1 х 21) + (1 х 22) + (0 х 23) + (0 х 24) + (0 х 25) + (0 х 26) + (1 х 27) = 135.
Вот так, оказывается, выглядит в двоичной системе исчисления число 135. Давай¬те теперь научимся пересчитывать числа из десятичной системы в двоичную. Для этого нужно число 135 разделить на.2. Получается 67 и остаток 1 (запомним 1, т. к. она определяет первый двоичный разряд искомого числа). Теперь 67 снова делим на 2, получается 33 и остаток 1 (таким образом получено уже две двоичные едини¬цы, т. е. 11). 33 делим на 2, получаем 16 и остаток 1 (в результате получаем три двоичные единицы, 111). 16 делим на 2, получаем 8 и остаток 0 (результат 0111). И наконец, 8 делим на 2 = 4, остаток от деления при этом будет 0 (получаем 00111); 4 делим на 2 = 2, остаток 0 (получаем 000111); 2 делим на 2 = 1, остаток 0 (итого 0000111). Оставшаяся единица частного на два не делится, значит, это последний, самый старший разряд искомого числа. Просто дописываем ее к ранее сформиро¬ванным разрядам и получаем окончательный ответ— 10000111. Получилось пер¬воначальное число.
Рис. 1.3. Двоичное число
Вот так происходит преобразование чисел в двоичную систему исчисления. Таким же образом можно перевести число в любую другую систему (двоичную, восьмеричную, шестнадцатеричную). Для более полного закрепления материала в табл. 1.1 показано соответствие десятичных чисел двоичным.
Попробуйте сами перевести пару чисел из одной системы исчисления в другую.
Таблица 1.1. Таблица соответствия десятичных и двоичных чисел
Десятичное | Двоичное | Десятичное | Двоичное |
0 | 0 | 6 | 110 |
1 | 1 | 7 | 111 |
2 | 10 | 8 | 1000 |
3 | 11 | 9 | 1001 |
4 | 100 | 10 | 1010 |
5 | 101 |
Например, попробуйте перевести число, состоящее из 8 бит (1 байт), у которого все биты состоят из единиц, в десятичную систему. Вы должны получить 255. Это максимальное число, которое можно записать в одном байте, потому что все его биты равны 1. Вот так и получается, что в 8 бит можно записать числа от 0 до 255. В 16 битах (2 байта или слово) можно записать число от 0 до 65 535. В 32 битах (двойное слово) можно уже записать число от 0 до 4 294 967 295.
В компьютере принято вести расчет в двоичной или шестнадцатеричной системе. Вторая вошла в обиход, когда компьютеры стали 16-разрядными. Да, когда мы будем писать свои программы на Delphi, то будем использовать привычную нам десятичную систему, потому что перед нами интеллектуальный компилятор, который во время компиляции сам переведет все числа в нужный процессору вид, но понимать, какими числами думает процессор, просто необходимо.
Шестнадцатеричная система выглядит немного по-другому. Каждый разряд содержит уже не 2 состояния (как в двоичной системе) или десять (как в десятичной системе), а шестнадцать. Поэтому один разряд может принимать значения: 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, Е, F. Буква "А" соответствует цифре 10 в десятичной системе, "В" соответствует 11 и т. д.
Например, число 1А в шестнадцатеричной системе равно 26 в десятичной. Почему? Да в соответствии все с той же формулой. Только здесь нужно возводить уже 16 в степень номера разряда. "А" —десять, нужно умножить на 16°. В результате получится 10. 1 — первый разряд нужно умножить на 161, получится значение 16. Затем полученные результаты складываются и определяется искомое число — 10 + 16 = 26. В результате, как показано в табл. 1.2, можно установить соответствие между числами, записанными в различных системах исчисления.
Таблица 1.2. Таблица соответствия десятичных, двоичных и шестнадцатеричных чисел
|
Таблица 1.2 (окончание)
|
На протяжении всей книги мы будем иногда встречаться с шестнадцатеричной системой исчисления (без этого никуда не денешься). В этом случае, когда нужно будет показать, что число шестнадцатеричное, перед ним будет ставиться знак решетки #, например, #13. В других языках, например Assembler или С++, принято ставить в конце числа букву h (13h). Но этот сайт о Delphi, поэтому здесь будем писать так, как принято в этой среде разработки, чтобы потом не возникало никаких вопросов.
До сих пор рассматривались целые числа. С числами с плавающей точкой (имеющими дробную часть) совершенно другая история, и ее мы рассматривать не будем.
Теперь разберемся со знаком у чисел. Если заранее предусмотрено, что число может быть отрицательным, то его длина сокращается ровно на один бит (этот бит отводится под знак числа). Так, неотрицательное целое число может быть 8- битным, тогда как число со знаком будет 7-битным. Первый бит будет означать знак. Если первый бит равен 1, то число отрицательное, иначе положительное.
В дробных числах один байт может быть отведен для целой части и один для дробной. Никогда не смешивают целую и дробную части в одно целое. За счет этого дробные числа всегда будут занимать больше памяти, и операции с ними будут проходить намного дольше.
В первых процессорах вообще не было команд для работы с вещественными числами. Со временем разработчики поняли, что работать с вещественными числами через команды целочисленных вычислений достаточно накладно, и в компьютеры стали устанавливать математические сопроцессоры. Этот модуль был выполнен в виде отдельного процессора. В современных компьютерах сопроцессор реализован в виде модуля внутри основного процессора.
На первый взгляд перевод чисел очень сложный процесс, но вручную им заниматься не обязательно. Человек уже давно придумал для себя хорошего помощника — калькулятор. С его помощью без проблем можно перевести число в любую систему исчисления.
Запустите встроенный в Windows калькулятор (Пуск | Программы | Стандартные | Калькулятор). Теперь выберите из меню Вид пункт Инженерный. На рис. 1.4 показано окно, которое вы должны увидеть.

Для перевода числа в другую систему просто наберите его в окне ввода кальку-лятора и потом выберите нужную систему исчисления.
На рисунке кнопки пере-ключения из одной системы исчисления в другую выделены овалом:
- Hex — шестнадцатеричная;
- Dec — десятичная;
- Oct — восьмеричная;
- Bin — двоичная.
Возникает вопрос — зачем здесь так долго рассказывалось о преобразованиях чисел, когда так легко можно воспользоваться калькулятором?
Ответ прост— это нужно знать. Поверьте мне. Если вы будете понимать, как происходит преобразо-вание, то вам потом легче будет работать с этими числами. Уметь использовать компьютер и язык программирования — это хорошо, но понимать, как и что про-исходит — намного лучше.