Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
Представление чисел в ЭВМ.
|
Не верите? Что же, запустите вполне современный компилятор Quick Basic версии 4.5 фирмы Microsoft и наберите следующую несложную программу:
Нетрудно видеть, что программа для трех соседних значений суммирует m раз величину 1/m. Казалось бы, конечный результат ее работы, равный m x (1/m) - 1 должен обратиться в ноль. Проверим. Запустив программу, увидим на экране:
Иными словами, результат точный лишь для числа 512, которое является степенью двойки! Случайно ли это? Испробуем числа 1024, 2048, 8192, 16384, и 32768. Результат будет аналогичный. |
Видимо придется все же набраться терпения и поговорить о системах счисления поподробнее. Начнем с анализа способа записи чисел в обыденной жизни. Возьмем любое произвольное число, например, 1985 (оно может означать год введения курса информатики в школу, а может и нечто совершенно иное). Прочтем его максимально подробно: одна тысяча девятьсот (девять сотен) восемьдесят (восемь десятков) пять (по аналогии добавим - пять единиц). Итак,
Если повнимательнее посмотреть на полученное выражение, то мы заметим, что цифры, образующие наше число, умножаются на последовательные степени числа 10:
Таким образом, обнаруживается любопытная закономерность: всякое написанное нами число может быть представлено в виде специального разложения по степеням числа 10 и для записи используется набор из десяти цифр. Сам по себе вывод, вероятно, не очень неожиданный, но возникает вопрос: почему в основу системы изображения чисел положено именно число 10? Только не торопитесь говорить, что на него удобно умножать и делить - это не причина, а следствие того, что все числа выражаются через степени десятки. Для выяснения истинной причины необходимо обратиться к истории возникновения счета. Пальцы на руках - вот тот первоначальный "счетный аппарат", которым начал пользоваться человек с незапамятных времен. По случайному стечению обстоятельств пальцев оказалось десять. Итак, в основе общепринятой системы представления чисел лежит совсем не математическая, а анатомическая причина!
Задумаемся, имеет ли десятичная система (или как ее официально именуют математики, система счисления с основанием 10) какие-то преимущества перед другими? Нет, никаких, кроме удобства счета на пальцах (да и то, по-видимому, современному образованному человеку не требуется). Так что придется нам смириться с тем, что система записи чисел, к которой мы так привыкли, не единственная и ничем не лучше остальных.
Кроме десятичной, в жизни нам могут встретиться самые разнообразные системы счисления, например, двенадцатеричная. Сохранился даже специальный термин для названия основания этой системы - дюжина. Многие предметы - ножи, тарелки, носовые платки иногда по старинке считают дюжинами. Несомненные остатки двенадцатеричной системы встречаются у англичан: 1 фут = 12 дюймам, а 1 шиллинг = 12 пенсам. Если вдуматься, то окажется, что двенадцатеричная денежная система значительно удобнее десятичной: шиллинг удается поровну разделить между двумя, тремя, четырьмя, шестью и двенадцатью людьми, тогда как 10 рублей справедливо распределяется только на двоих, пятерых или десятерых.
Тем, кого не убеждает пример "старой доброй Англии", посоветуем вспомнить измерение времени: 1 мин. = 60 сек., 1 час = 60 мин. Это тоже своеобразное проявление недесятичной системы счисления, а именно, системы с основанием 60.
Приведенные факты убедительно свидетельствуют, что не надо абсолютизировать роль десятичной системы: для некоторых применений вполне может оказаться гораздо удобнее другая система представления чисел. Это утверждение прекрасно подходит и к способу хранения чисел в ЭВМ.
Какую же числовую систему удобно положить в основу компьютера? С точки зрения человека, конечно, лучше всего традиционная десятичная система. Но вот технически реализовать ее на ЭВМ крайне сложно: для хранения десятичной цифры требуется устройство с десятью устойчивыми состояниями! Разработать такую электрическую схему можно, но она будет достаточно сложной и дорогой (не забывайте, что таких элементов потребуется огромное количество!)
Итак, приходится отказаться от "милой сердцу" десятичной системы и использовать другую. Какую? Все остальные человеку одинаково непривычны, поэтому смело можно выбирать наиболее удобный с технической точки зрения вариант. Для инженеров наиболее просто реализовать двоичный элемент: включено/выключено, горит/не горит, проводит/не проводит и т.д. Кроме того, в двоичной системе наиболее просто реализуются все операции: например, двоичная таблица умножения состоит всего из четырех строк:
0 х 0 = 0 0 х 1 = 0 1 х 0 = 0 1 х 1 = 1. |
Насколько это проще той таблицы, которую мы все заучивали в первом классе! Добавим к сказанному, что компьютер с легкостью умеет переводить числа из десятичной системы счисления в двоичную и наоборот, так что во многих случаях наличие двоичной формы внутреннего представления данных можно даже не заметить.
При изучении принципов работы ЭВМ обойтись без двоичной системы счисления, конечно, не удастся. Поэтому напомним читателю наиболее простые способы перевода чисел "2 в 10" и "10 в 2".
Для перевода из двоичной системы в десятичную удобно пользоваться суммированием по степеням двойки. Например:
Обратный перевод обычно делается путем последовательного деления на основание системы - число 2. Например, для нашего "подопытного" числа 20 это будет выглядеть так:
Остается "собрать" итоговое двоичное число из остатков от деления, не забывая при этом, что старшие разряды получаются всегда позднее, чем младшие. В результате получим уже известное нам двоичное число
Все сказанное выше относилось к случаю положительных чисел. Для представления отрицательных чисел используется так называемый ДОПОЛНИТЕЛЬНЫЙ КОД. Не вдаваясь в математическое обоснование такого метода представления, сразу сформулируем правила преобразования в виде "готового рецепта". Для перевода числа в дополнительный код необходимо проделать следующее:
Применим сформулированный алгоритм к числу -5. Сначала представим модуль числа в двоичного виде, дополнив его нулями слева до необходимого количества разрядов. Пусть нас интересует стандартное 16-разрядное значение, тогда десятичное число 5 преобразуется к виду 0000 0000 0000 0101 . Произведем замену нулей и единиц; получим 1111 1111 1111 1010 . Остается прибавить единицу и ответ готов: 1111 1111 1111 1011.
Особое внимание обратим на старший разряд. Он называется знаковым и равен 0 для знака "плюс" и 1 для "минуса". При определении величины числа знаковый разряд не используется, так что числа со знаком могут иметь максимальное значение, состоящее из 15 двоичных разрядов.
Обращаю ваше внимание на несколько интересных фактов о дополнительном коде. Во-первых, повторное применение рассмотренных выше правил преобразований в дополнительный код возвращает исходное число. Во-вторых, сложение исходного числа с его дополнительным кодом всегда дает нулевой результат, т.к. X + (-X) = 0. Обобщая это свойство, можно утверждать, что вместо вычитания всегда можно воспользоваться сложением уменьшаемого с дополнительным кодом вычитаемого. Все эти свойства часто бывают полезны для проверки правильности вычислений. В их справедливости предлагаем читателю убедиться самостоятельно.
На этом нашу затянувшуюся экскурсию в мир двоичных чисел можно было бы и закончить, если бы не один их существенный недостаток - громоздкость. В самом деле, относительно скромное десятичное число 254 в двоичной системе имеет вид 1111 1110, а 16384 выглядит прямо-таки устрашающе: 100 0000 0000 0000 (14 нулей). Поэтому на практике чаще всего переходят к более компактной системе счисления с основанием, кратным двойке - к шестнадцатеричной системе счисления. В этой системе помимо цифр "0"-"9" в соответствии с общей теорией должны быть еще шесть цифр: цифры "10"-"15". Вместо них принято писать заглавные латинские буквы от "А" до "F". Некоторое наглядное представление о шестнадцатеричных числах можно получить из следующей ниже полезной таблицы:
10 | 2 | 16 |
0 | 0000 | 0 |
1 | 0001 | 1 |
2 | 0010 | 2 |
3 | 0011 | 3 |
4 | 0100 | 4 |
5 | 0101 | 5 |
6 | 0110 | 6 |
7 | 0111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
16 | 0001 0000 | 10 |
Из таблицы хорошо видно, что один шестнадцатеричный разряд заменяет четыре двоичных. Приведенная таблица легко может быть использована для перевода из двоичной системы в шестнадцатеричную и наоборот. Попутно заметим, что если исходное число десятичное, то шестнадцатеричное число можно получить из него путем деления на 16, как это мы делали для случая двоичной системы.