Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архитектура вычислительных систем и Ассемблер с приложением методических указаний к лабораторным работам. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
Глава 2. Представление данных
Проволока мира — число.
В. Хлебников. Зангези
Пифагорейцы в VI–IV веках до н. э. считали числа первоосновой мира. В на­стоящее время этот принцип воплощается на практике — всё больше информации переходит в цифровой формат, то есть описывается при помощи чисел. Числа же в свою очередь представляются в вычислительных системах при помощи специаль­ных кодов в виде набора нулей и единиц.
2.1. Качественные и количественные данные
Всё познаваемое имеет число, потому что без числа невозможно что-либо понять или распознать.
Филолай. Антология Стобея, I, 21
Данные делятся на две основные группы — количественные и качественные. К
количественным
удовлетворяющих тем или иным условиям, либо числовые результаты измерений. Для таких данных имеют смысл базовые арифметические действия — сложение, вычитание, умножение на число или другую величину подходящей размерности. Именно для описания количественных данных изначально и появилось само поня­тие числа.
Для подсчёта количества объектов (яблок, землекопов и т. д.) используются
туральные числа: 1, 2, 3,...
обозначается как N.
Ноль не используется при счёте, поэтому не считается натуральным числом. Тем не менее, часто удобно рассматривать множество Оно обозначается множеством натуральных чисел, но в отечественной литературе, как и в значитель­ной части зарубежной, принято определение из предыдущего абзаца, не включаю­щее ноль. Универсальное название элементов также их часто называют беззнаковыми целыми числами.
Для описания некоторых величин требуются отрицательные числа (−1,−2,
3,...
). Множество, включающее натуральные числа, противоположные им отри­цательные и ноль, называется множеством целых чиселZ. В противоположность беззнаковым (неотрицательным) величинам те, которые могут принимать как поло­жительные, так и отрицательные значения, называются знаковыми.
данным относятся в основном либо сведения о числе объектов,
Множество натуральных чисел
{1, 2, 3,...}
обычно
N ∪{0} = {0, 1, 2, 3,...}
N0. В некоторых зарубежных источниках именно
N0называется
N0— неотрицательные целые числа,
на-
.
42 Глава 2. Представление данных
Результаты измерений большей части величин (длина, путь, масса, время и т. д.) невозможно представить в виде целых чисел, знаковых или беззнаковых. Соот­ветствующие им
вещественные
числа (в частности,
1
,√2,π,e
3
) образуют множе-
ство R.
Числа и, соответственно, количественные данные лучше всего подходят для обработки с помощью вычислительных систем. Таким образом, чтобы ввести и использовать какую-то информацию в вычислительной системе, эту информацию необходимо представить в виде числа или набора чисел.
Качественные
данные представляют собой, как правило, элементы (символы), несравнимые между собой или цепочки (строки) подобных символов. В частности, к качественным данным относятся цвет, буквы, цифры, ноты, символы шахматных фигур, карточных мастей и т. д. Множество всех возможных символов называется алфавитом.
Для обработки с помощью вычислительных систем качественные данные также необходимо представить в виде чисел. Чтобы сделать это, символы качественных данных упорядочиваются, затем каждому символу сопоставляется его порядковый номер в списке — код символа, беззнаковое целое число. Полученное соответствие называется кодовой таблицей.
Наиболее известны кодовые таблицы, сопоставляющие коды знакам письмен­ных языков — цифрам, буквам кириллицы, латиницы, знакам препинания и т. д. (чаще всего под термином «символ» подразумевается именно знак письменно­сти). В частности, старейшая из принятых в настоящее время кодовая таблица
ASCII (American Standard Code for Interchange of Information) описывает цифры,
строчные и заглавные буквы латиницы, некоторое количество знаков препинания и специальных символов (так называемые ASCII-символы) и сопоставляет им коды в диапазоне от0до
127[59
]. Все более современные кодовые таблицы, включаю­щие кириллицу и другие национальные знаки, описывает ASCII-символы этими же кодами.
Кодовая таблица ASCII настолько прочно закрепилась в информационных
технологиях, что такие языки, как C/C++, вообще не делают различия между ASCII-
char
символом и его кодом: тип
является одновременно и символьным, и коротким целым. При этом представление символов не из таблицы ASCII, в частности, кириллицы, может быть различным в разных реализациях.
Сейчас для представления различных национальных алфавитов чаще всего используется кодовая таблица Unicode, сопоставляющая кириллице коды от 1024 до 1279 (обычно коды Unicode записывают в шестнадцатеричном виде — от до
04FF
). Для того, чтобы представление буквы кириллицы в памяти компьютера
0400
не могло совпасть с представлением последовательности из нескольких ASCII­символов, используются различные
кодировки
Unicode. Наиболее распростра­нённая из них — UTF-8 — записывает символ в виде цепочки байтов, включаю­щих, кроме собственно кода, ещё и служебную информацию. Соответственно,
2.2. История чисел 43
кириллица, представленная в UTF-8, занимает диапазон от D080 до D19F, так что кириллические буквы занимают два байта.
2.2. История чисел
Всякое начало трудно, — эта истина справедлива для каждой науки.
К. Маркс. Капитал
Система счисления
— это представление чисел с помощью специальных пись-
менных знаков — цифр.
Старейшая система представления чисел — единичная, когда при счёте каждо­му объекту сопоставляют один счётный предмет или символ — загибают палец, передвигают бусину чёток, ставят галочку на бумаге или зарубку на доске. Таким образом, чтобы записать числоN, нужно поставитьNгалочек или зарубок. Значе­ние счётного предмета или знака при этом не зависит от его положения и всегда равно единице. Этот громоздкий способ записи подходит только для небольших натуральных чисел.
Для подсчёта большого количества объектов естественно разбивать их на группы одного размера и подсчитывать уже эти группы. Размер такой группы называется основанием системы счисления.
Даже в единичной системе обычно используется группировка по какому-либо основанию. В чётках через определённое количество бусин вставляется отличная размером или цветом; пальцы рук естественным путём сгруппированы по5и10, фаланги — по12(на всех пальцах одной руки, исключая большой),15(включая большой), 24 (на двух руках, исключая большие пальцы) и 30.
Исторически чаще всего использовались основания, равные10(по числу паль­цев на руках) или12(по числу фаланг пальцев одной руки, кроме большого — он используется для указания на текущую фалангу-цифру). Системы счисления с такими основаниями называются соответственно десятичной и двенадцатеричной. Некоторыми народами использовались также восьмеричная система счисления (по суставам пальцев одной руки, кроме большого) и даже девятеричная. Сейчас общепринятой в быту является десятичная система счисления.
Группировка счётных знаков позволяет нагляднее представить относительно большие числа, но единичная запись всё равно будет громоздкой. Для сокращения длины логично записывать число не объектов, а групп и при этом как-то различать записи «Nобъектов» и «Nгрупп объектов». Простейшее решение — ввести для группы, например, десятка, специальный счётный знак.
Подобная запись использовалась, в частности, в Древнем Египте. Там была принята десятичная система, при этом использовались различные знаки для записи
44 Глава 2. Представление данных
единиц (|), десятков (∩), сотен и так далее. Например, для записи числа
2 ·10 + 9 ·1
были необходимы два знака десятков и девять знаков единицы:
29 =
∩ |||| ∩ |||||
Порядок записи этих знаков не был чётко определён.
Таким образом, значение счётного знака зависело только от его формы, но не от его положения относительно других знаков. Такие системы счисления называются непозиционными.
В Древнем Риме применялась смешанная система счисления — пятично-деся­тичная. Специальные знаки существовали для единиц (I, схематичное изображение
V
пальца), пятёрок (
, напоминающая руку с отставленным большим пальцем), деся-
ток (X, две руки), 50, 100 ит.д.
Значение цифры зависело от того, находилась ли она справа от более крупной цифры (в этом случае их значения складывались) или слева (в этом случае меньшее значение вычиталось из большего). В частности,
,
XXIX
31 = 3 · 10 + 1 = XXXI
. Таким образом, значение счётного знака зависит
29 = 2 ·10 + 9 = 2 ·10 + 10 1=
и от его формы, и от его положения относительно других знаков, но при этом, например, единица и десяток обозначаются при помощи принципиально разных символов. Такая система счисления называется смешанной.
Римская запись сложна, почти так же громоздка, как египетская и, кроме, того, неоднозначна — например, число
записывалось и как
IIII (4 ·1)
, и как
IV (5 − 1)
4
Существуют различные виды римской записи, позволяющие либо сократить длину числа, либо убрать неоднозначность, но не то и другое сразу.
В Индии была придумана более удобная запись, в которой использовались различные счётные знаки для всех чисел от единицы до девяти, а также впервые возникло специальное обозначение для нуля. Для подобной записи числа, как и в египетской системе, разбивается на сумму некоторого числа единиц, десятков и т. д., причём для записи количества единиц и десятков будет использован один и тот же набор цифр. Значение цифры определяется её положением в записи; такая система счисления называется
позиционной.
Десятичная позиционная запись была перенята у индийцев арабами, а затем распространилась повсеместно. Начертание счётных знаков со временем превратилось в так называемые арабские цифры, которые сейчас привычны нам с детства, как и позиционная система записи:
2 ·
10 + 9 · 1=29.
В настоящее в быту повсеместно используется именно десятичная позицион­ная запись. На десятичной позиционной системе основано наиболее совершенное из простых счётных устройств — русские счёты. Ряд спиц в них соответствует позициям, десять костяшек на каждой спице — цифрам.
Одна из первых механическая суммирующая машина — Паскалина — также была построена на основе десятичной позиционной записи, несмотря на то, что использовалась для финансовых расчётов в принятой тогда недесятичной денежной системе. Каждому десятичному разряду соответствовало одно зубчатое колесо, на
.
.
2.2. История чисел 45
которое были нанесены цифры от0до9. Поворачиваясь от9к0, колесо сдвигало следующее за ним, формируя перенос.
Десятичная позиционная система счисления использовалась в механических калькуляторах, арифмометрах, разностной машине Бэббиджа, весившей более трёх тонн, а также в его же проекте аналитической машины, не реализованном из-за из-за своих габаритов и высокой стоимости. Даже много позже в самом известном из первых электронных (то есть построенных на вакуумных лампах) калькулято­ров — ЭНИАК — использовалась десятичная система, из-за чего размеры ЭНИАК превысили размеры более поздних ламповых вычислительных машин.
При этом, как уже было сказано, основание системы счисления, равное десяти, было популярным, но не единственным. В XVI–XVII вв. различные учёные рас­сматривали двоичную, троичную и т. д. системы счисления и их свойства [11,21]. Лейбниц видел в двоичной системе мистическое отражение реальности, но не реко­мендовал использовать её на практике для вычислений (знаменитый арифмометр Лейбница был основан на десятичной системе).
Первая реально построенная вычислительная машина Z1 была механической и была создана в Германии Конрадом Цузе. Идеи Цузе были поразительно схожи с планами Бэббиджа (несмотря на независимую работу) и теми, что позже будут реализованы фон Нейманом. При этом Z1 помещалась в гостиной Цузе, а её масса составила всего 500 кг. Такая компактность была достигнута за счёт использо­вания другой позиционной системы счисления —
двоичной.
Для ввода-вывода в Z1 было реализовано двоично-десятичное преобразование. Усовершенствован­ный вариант вычислителя Цузе, электромеханический Z2 на основе телеграфных реле, закрепил использование двоичной логики — реле может находиться только в двух состояниях — оно либо открыто, либо закрыто. Используемые в последу­ющих вычислительных машинах вакуумные лампы, а затем транзисторы также могли находиться в двух состояниях. Таким образом, в настоящее время двоичная позиционная система применяется в электронике повсеместно.
Но двоичная система не является самой экономичной. Теоретически опти­мальной является система счисления по основаниюe, а из натуральных оснований наиболее экономичным является3[48]. Троичная ЭВМ — Сетунь была разрабо­тана в МГУ, выпускалась серийно и оказалась весьма эффективной. Но, так как для построения троичных логических элементов использовалась двоичная эле­ментная база (транзисторы), существенно уменьшить габариты и стоимость за счёт экономичности основания системы счисления не удалось, так что в дальнейшем от троичной логики надолго отказались. Тем не менее, недавно о ней снова при­шлось вспомнить: элементы квантовых компьютеров могут принимать как раз три значения.
Кроме позиционных систем счисления, в вычислительной технике использо­вались и другие, более оригинальные системы представления чисел. Наиболее интересной представляется система остаточных классов, или модулярная арифме-
46 Глава 2. Представление данных
тика — представление числаxв виде последовательности остатков от деления на набор взаимно простых чисел p
x =(x mod p
,...pn.
1,p2
,xmod p2,... xmod pn)
1
Такое представление позволяет выполнять умножение с той же скоростью, что и сложение.
Первым модулярным компьютером была чехословацкая ЭВМ Эпос, позже в СССР разрабатывалась серия модулярных ЭВМ. Наиболее известная советская модулярная ЭВМ, К-340А, используется до сих пор из-за своей поразительной надёжности и быстродействия [39,40]. В настоящее время на модулярной ариф­метике основаны многие специализированные процессоры, предназначенные для обработки сигналов в режиме реального времени.
Программная реализация модулярной арифметики в настоящее время исполь­зуется для ускорения вычислений в криптографии.
2.3. Позиционные системы счисления
Человек, который дружит с тиранами, подобен камешку при вычислении, значение которого бывает иногда большое, а иногда малое.
Приписывается Солону.
Диоген Лаэртский. О жизни, учениях и изречениях
знаменитых философов
Все позиционные системы счисления строятся по одному общему принципу. Выбирается некоторое натуральное число ния, и каждое число
X N0представляется в виде комбинации его степеней
N>1
с коэффициентами, принимающими значения от 0 до N 1,т.е.ввиде
— основание системы счисле-
x
k
(2.1)
где
0  xi<N
X = x
+ xN + ...+ xN
0
— целые. Такое разложение существует и единственно для
каждого X N0.
Далее числоXсокращённо записывается в виде отличать это представление от сокращённой записи умножения
xk...x1x0. Для того, чтобы
xk· ...· x1· x0,
над позиционной записью может быть проведена горизонтальная черта; основание системы счисленияNможет быть указано в виде нижнего индекса, таким образом:
X = xk· Nk+ ...+ x1· N + x0= xk...x1x
0
N
(2.2)
Если позиционность представления и основание системы очевидны из контекста, эти обозначения могут опускаться. Так, запись13для позиционного десятичного
2.3. Позиционные системы счисления 47
представления числа «тринадцать» будет, скорее всего, прочитана правильно, как и
0400 04FF
для позиционного шестнадцатеричного представления диапазона
кодов Unicode.
Каждому возможному значению
xi,от0до
N 1
, соответствует специальный знак — цифра. Для записи значений, не превышающих девяти, используются при­вычные нам знаки
0 ...9
. Если необходимо записать одной цифрой значение «де­сять», для этого обычно используется знакA, одиннадцать записывается как и так далее.
Таким образом, в часто используемой в информационных технологиях шест­надцатеричной системе счисления числа записываются с помощью шестнадца­ти цифр:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Знаки
A ...F
в этом контексте на-
зываются именно цифрами, а не буквами, и качественно ничем не отличаются
0 ...9
от знаков
. В двенадцатеричной системе используется двенадцать цифр:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,A,B.
=1112= D
13
10
16
Величина, обозначаемая цифрой в записи числа, зависит от её позиции (разряда). Разряды числа, в отличие от текста, записываются по-арабски — справа налево. Цифра, записываемая крайней справа, обозначает количество единиц (младший радряд), вторая справа в десятичной системе обозначает количество десятков, в двенадцатеричной — количество дюжин и т. д. Крайний слева разряд называется старшим.
B
12345
=5·100+4· 101+3· 102+2· 103+1· 10
10
4
Иногда разряды числа нумеруются, но порядок нумерации в различных источниках не совпадает. Младший разряд обозначается иногда как первый (так сложилось исторически), иногда как нулевой (так как
1=N0). В некоторых источниках
разряды чисел фиксированной ширины (например, регистров) вообще нумеруются от старшего к младшему, по направлению текста.
В любой позиционной системе счисления ноль записывается как0, единица — как 1. Основание этой системы счисления всегда записывается в виде 10.
2.3.1. Перевод натуральных чисел между позиционными системами
счисления
— Что общего между Хэллоуином и Рождеством? — Каждый программист знает: 31 oct = 25 dec.
Программистский фольклор
В общем случае для перевода натуральных чисел между системами счисления используется деление с остатком. Действительно, сгруппируем в
(2.1)
все члены,
48 Глава 2. Представление данных
куда входит N в степени, большей 1:
X = x
+x1· N + ...+ xN
0
k
(2.3)
вынесем за скобки N и обозначим оставшееся значение как X
k1
·N = x0+ XN, (2.4)
1
0 x0<N
где
x0и
X1— целые неотрицательные числа, причём
младшая цифра
X = x
+x1+ ...+ xN
0

X
x0числаXвN-ичной системе счисления — остаток от целочис-
:
1
. Таким образом,
ленного деленияXнаN, также в процессе этого деления мы получим частное, равное X1. Так как в соответствии с (2.4)
k1
, (2.5)
X1наNи так далее:
следующую цифру
X
= x1+ xN + ...+ xN
1
x1можно найти как остаток от деления
266 = 22 · 12 + 2
22 = 1 · 12 + 10
1= 0· 12 + 1
266
=1A212. (2.6)
10
Если необходимо перевести число из системы счисления по произвольному
N
основанию
в ту систему счисления, которая используется в расчётах (при расчётах вручную это обычно десятичная система), это можно сделать, используя определение (2.2):
12345
=5·120+4· 121+3· 122+2· 123+1· 124= 24677
12
1012=1·20+0· 21+1· 22=5
1A16=10·160+1· 161=26
10
10
10
Компьютер оперирует с данными, представленными в двоичной системе, таким образом, при вводе десятичных данных необходимое преобразование также можно выполнить по (2.2):
13
=11·10100+1· 10101= 11 + 1010 = 1101
10
Впрочем, десятично-двоичное преобразование уже реализовано в библиотеке ввода-вывода любого языка высокого уровня и выполняется неявно для програм­миста и тем более для пользователя.
Если число необходимо перевести из системы счисления по основанию
в систему по основанию
Nk,k N
или наоборот, то также нет необходимости
N
в сложных вычислениях. В этом случае существует взаимно однозначное соответ­ствие между группой изkразрядов в системе по основаниюNи одним разрядом в системе по основанию
Nk, что будет подробнее рассмотрено ниже на примере
двоичной, восьмеричной и шестнадцатеричной систем.
2.3. Позиционные системы счисления 49
2.3.2. Экономичность системы счисления
Ка — взаимное сближение двух точек до неподвижного предела, остановки многих точек у одной неподвижной. Звезда движений, обратная Эс.
В. Хлебников. Царапина по небу
С точки зрения математики, все позиционные системы счисления равнозначны. Но, как показывает практика, вычислительные системы, обрабатывающие данные в двоичной системе, более просто устроены и, соответственно, имеют меньшие габариты, чем десятичные (при сопоставимых возможностях). Это связано с таким свойством, как экономичность, или компактность системы счисления. Считается, что понятие экономичности введено фон Нейманом.
Рассмотрим сравнительную экономичность двоичной и десятичной систем на следующем примере [48]. В десятичной системе для представления
0до999
используется три разряда, каждый из которых помещает одну из десяти
103чисел от
различных цифр, то есть всего используется30цифр. В двоичной системе из
30
тех же или единицу. Таким образом, всего можно представить
цифр можно составить15разрядов, каждый из которых хранит ноль
215= 32 768
различных
чисел — более чем на порядок больше, чем в десятичной.
Обобщая эти рассуждения, можно оценить количество
En(N)
различных чисел,
представимых в системе счисления по основанию N с помощью n цифр:
n
(N)=N
E
n
N
(2.7)
Хотя на практике используются только натуральные основания систем счисле­ния,
(2.7)
можно распространить и на вещественные положительныеN. На рис. 2.1
представлена зависимость En(N) для трёх значений количества цифр n.
18
E
(N)
n
16 14 12 10
8 6 4 2
1
e
24681012
n =4
n =8
n =6
N
Рис. 2.1. Эффективность систем счисления
Как видно из рис. 2.1, количество используемых цифрnне влияет на то, какая из систем счисления более экономична, от него зависит только выраженность пика:
50 Глава 2. Представление данных
чем большее количество цифр используется, тем больше разрыв между различны­ми системами. Для всех значенийnдвоичная система существенно превосходит десятичную, но отнюдь не является самой эффективной. Максимум ходится в точке (2.7)
. Из натуральныхNнаибольшее значение достигается при
N = e =2,71828 ...
, что можно доказать дифференцированием
En(N)
N =3
на-
, то есть
троичная система ещё экономичнее двоичной. Далее эффективность снижается с ростом N : четверичная система так же экономична, как и двоичная; при N>4 экономичность плавно снижается и асимптотически стремится к единице.
Также можно заметить, что для всехnполучаем
En(1) = 1
. Действительно (хотя единичная система не является в полной мере позиционной и, соответственно, не может однозначно рассматриваться как частный случай
(2.7)
): в единичной
системе с помощью n цифр можно записать только одно число — оно равно n.
Таким образом, наиболее эффективной должна быть вычислительная машина, построенная с использованием троичной системы счисления. Двоичная система, ис­пользование которой связано с тем, что большинство существующих электронных компонентов может находиться только в двух состояниях, также относительно эффективна.
2.3.3. Нецифровые символы в представлении чисел
Как рассказать володение чисел, Поведать их полдням и ночам?
В. Хлебников. Дети Выдры
В позиционной системе счисления по основаниюNс помощью цифр мож­но записать любое число из
N0. Но, как было сказано выше, для представления
некоторых данных недостаточно неотрицательных целых чисел. В этих случаях ис­пользуются формы записи, включающие дополнительные символы, не являющиеся цифрами.
Знак
В частности, отрицательные числа маркируются нецифровым символом «−» (минус), после которого записывается абсолютная величина (модуль) числа в ис­пользуемой системой счисления. Соответственно, перед значением положительно­го числа может быть поставлен символ + (плюс), но он часто опускается:
1 +2
= 1
10
=+102=+212=2
10
1110= −10112= −
2
= 1
12
12
A
12
(2.8)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]