Представление информации в вычислительных машинах
2. Представление информации в вычислительных машинах
Информация в ЭВМ кодируется в двоичной и двоично-десятичной системах счисления.
Система счисления — это способ наименования и изображения чисел с помощью символов, имеющих определенные количественные значения.
В зависимости от способа изображения чисел, системы счисления делятся на позиционные и непозиционные.
В позиционной системе счисления количественное значение каждой цифры зависит от ее места (позиции) в числе (например, используемая нами десятичная система).
Непозиционная система счисления - система, в которой для обозначения чисел вводятся специальные знаки, количественное значение которых всегда одинаково и не зависит от их места в записи числа (римская, I= 1; V=5; X=10; L=50; C=100; D=500; M=1000). |
Количество (Р) различных цифр, используемых для изображения числа в позиционной системе счисления, называется основанием системы счисления (две цифры – «0» и «1» – основание системы счисления «два», десять цифр – основание – «десять»).
В общем случае запись любого смешанного числа в системе счисления с основанием Р будет представлять собой ряд вида:
Индексы определяют местоположение цифры в числе (разряд):
□ положительные значения индексов - для целой части числа (m разрядов –> 0… m -1);
□ отрицательные - для дробной (s разрядов).45610=4*102 + 5*101 + 6*100, 1012=1*22+0*21+1*20.
Максимальное целое число, которое мб представлено в m разрядах (m=2, Nmax=99) |
|
|
Минимальное значащее (≠0) число, которое можно записать в s разрядах дробной части. Например, при s=3, Nmin=0,001 |
|
|
Имея в целой части числа m, а в дробной - s разрядов, можно записать много разных чисел. Например, при m=2, s=3 - > 105 |
Pm+S |
Двоичная система счисления имеет основание Р = 2 и использует для представления информации всего две цифры 0 и 1. Существуют правила перевода чисел из одной системы счисления в другую, основанные в том числе и на соотношении (стр. 1).
Например, двоичное число 101110,101 равно десятичному числу 46,625, так как
101110,101(2) = 1•25 + 0•24 + 1•23 + 1•22 + 1•21 + 0•2° + 1•2-1 + 0•2-2 + 1•2-3 = 46,625(10).
Практически перевод из двоичной системы в десятичную можно легко выполнить, надписав, как показано ниже, над каждым разрядом соответствующий ему вес и сложив затем произведения значений соответствующих цифр на их веса.
Например, двоичное число 010000012 равно 6510. Действительно, 64 • 1 + 1 • 1 = 65.
Вес |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Цифра |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
Обратный перевод из десятичной системы счисления в систему счисления с другим основанием по формуле (стр.1) для человека затруднителен, т.к. все арифметические действия по формуле следует выполнять в той системе счисления, в которую число переводится. Перевод может быть выполнен проще, если предварительно преобразовать отдельно целую и дробную части выражения (стр.1) к виду:
Алгоритм перевода числа
из десятичной системы счисления
в систему счисления с
0. При переводе смешанного числа следует отдельно переводить его целую и дробную части.
- Для перевода целой части числа его, а затем целые части получающихся частных от деления следует последовательно делить на основание Р до тех пор, пока очередная целая часть частного не окажется равной 0. Остатки от деления, записанные последовательно справа налево, образуют целую часть числа в системе счисления с основанием Р.
- Для перевода дробной части числа его, а затем дробные части получающихся произведений следует последовательно умножать на основание Р до тех пор, пока очередная дробная часть произведения не окажется равной 0 или не будет достигнута нужная точность дроби. Целые части произведений, записанные после запятой последовательно слева направо, образуют дробную часть числа в системе счисления с основанием Р.
Пример перевода числа 46,625 из десятичной в двоичную систему счисления.
- Переводим целую часть числа: 46 : 2 = 23 (остаток 0). 23 : 2 = 11 (остаток 1). 11: 2 = 5 (остаток 1). 5 : 2 = 2 (остаток 1). 2 : 2 = 1 (остаток 0). 1 : 2 = 0 (остаток 1).
Записываем остатки
- Переводим дробную часть числа: 0,625 • 2 = 1,250. 0,250 • 2 = 0,500. 0,500 • 2 = 1,000.
Записываем целые части
- Окончательно 46,62510 = 101110,1012.
2.1. Представление чисел с фиксированной и плавающей запятой
В вычислительных машинах применяются две формы представления двоичных чисел:
□ естественная форма или форма с фиксированной запятой
□ нормальная форма или форма с плавающей запятой (точкой).
1). В форме представления с фиксированной запятой все числа изображаются в виде последовательности цифр с постоянным для всех чисел положением запятой, отделяющей целую часть от дробной.
Например: в десятичной системе счисления имеется 5 разрядов в целой части числа (до запятой) и 5 разрядов в дробной части числа (после запятой); числа имеют вид: +00721,35500; -10301,20260.
Эта форма наиболее проста, естественна, но имеет небольшой диапазон представления чисел и поэтому чаще всего неприемлема при вычислениях. Диапазон значащих чисел N в системе счисления с основанием Р при наличии m разрядов в целой части и s разрядов в дробной части числа (без учета знака числа) будет: . Например, при Р=2, m = 10 и s = 6 диапазон: 0,015 < N < 1024.
Если в результате операции получится число, выходящее за допустимый диапазон, происходит переполнение разрядной сетки, и дальнейшие вычисления теряют смысл. В современных компьютерах естественная форма представления используется как вспомогательная и только для целых чисел.
2). В форме плавающей запятой каждое число изображается в виде двух групп цифр. Первая группа цифр называется мантиссой, вторая — порядком, причем абсолютная величина мантиссы должна быть меньше 1, а порядок — целым числом. В общем виде число в форме с плавающей запятой может быть представлено так: где М — мантисса (|М| < 1); r — порядок (целое); Р — основание системы счисления.
Например, числа запишутся так: +0,721355 • 103; 0,103012026 • 105.
Нормальная форма
Приведем пример. При P=2, m=22 и s=10 диапазон чисел простирается примерно от 10-300 до 10300. Для сравнения: количество секунд, которые прошли с момента образования планеты Земля, составляет всего 1018. Для m=10 наибольшее число ~ 9,2*1018.
Следует заметить, что все числа с плавающей запятой хранятся в машине в так называемом нормализованном виде. Нормализованным называют такое число, в старшем разряде мантиссы которого стоит ноль. У нормализованных двоичных чисел, следовательно, 0,5 <= \М\ < 1.
2.2. Алгебраическое представление двоичных чисел
Знак числа кодируется двоичной цифрой:
● код 0 означает знак + (плюс), ● код 1 означает знак — (минус).
Для алгебраического представления чисел, то есть для представления чисел с учетом их знака, в машинах используются специальные коды:
□ прямой код числа;
□ обратный код числа;
□ дополнительный код числа.
При этом два последних кода позволяют заменить неудобную для компьютера операцию вычитания на операцию сложения с отрицательным числом.
Дополнительный код обеспечивает более быстрое выполнение операций, поэтому в компьютере применяется чаще именно он.
1). Прямой код числа N обозначим [N]np.
Пусть модуль N= aaa...а;
□ если N > 0, то [N]np = 0,ааа...а;
□ если N < 0, то [N]np = 1,ааа...а;
□ если N = 0, то имеет место неоднозначность: может [0]np = 0,0... или [0]np = 1,0...
Если при сложении оба слагаемых имеют одинаковый знак, то операция сложения выполняется обычным путем. Если при сложении слагаемые имеют разные знаки, то сначала необходимо выявить число, большее по абсолютной величине, произвести из него вычитание меньшего числа, а разности присвоить знак большего числа.
Операции умножения и деления в прямом коде выполняются обычным образом, но знак результата определяется по совпадению или не совпадению знаков, участвовавших в операции чисел.
Операцию вычитания в этом коде нельзя заменить операцией сложения с отрицательным числом, поэтому возникают сложности, связанные с заемом значений из старших разрядов уменьшаемого. В связи с этим прямой код в ПК почти не применяется.
2). Обратный код числа N обозначим [N]обр.
Символ а* означает величину, обратную а, то есть если а = 1, то а* = 0, и наоборот.
□ если N > 0, то [N]обр = [N]пр = 0,аа...а,
□ если N < 0, то [N]обр = 1,а*а*...а*,
Т.е., для того чтобы получить обратный код отрицательного числа, необходимо все цифры этого числа инвертировать (в знаковом разряде поставить 1, во всех значащих разрядах нули заменить единицами, а единицы нулями).
□ если N = 0, то неоднозначность: может [0]обр = 0,00...0 или [0]обр = 1,11...1.
Например, число N = 0,1011, тогда [N]обр = 0,1011. Число N = -0,1011, [N]обр = 1,0100.
3. Дополнительный код числа N обозначим [N]доп
□ если N >= 0, то [N]доп = [N]пр = 0,аа...а,
□ если N <= 0, то [N]доп = 1,а*а*...а* + 0,00...1.
Для того чтобы получить дополнительный код отрицательного числа, необходимо все его цифры инвертировать (в знаковом разряде поставить единицу, во всех значащих разрядах нули заменить единицами, а единицы нулями) и затем к младшему разряду прибавить единицу. В случае возникновения переноса из первого после запятой разряда в знаковый разряд, к числу следует прибавить единицу в младший разряд.
Например, если N = 0,1011, то [N]доп = 0,1011;
N = -0,1100, то [N]доп = 1,0100;
N = -0,0000, то [N]доп = 10,0000 = 0,0000 (1-ца исчезает).
Таким образом, неоднозначности в изображении 0 (нуля) в данном случае нет.
Эмпирическое правило: для получения дополнительного кода отрицательного числа необходимо все символы этого числа инвертировать, кроме последней (младшей) единицы и тех нулей, которые за ней следуют.
2.3. Прочие системы счисления
Кроме рассмотренных систем счисления, применяемых внутри ЭВМ, при работе с компьютерами часто используют также двоично-десятичную и шестнадцатеричную системы.
Двоично-десятичная система счисления
Двоично-десятичная система счисления получила большое распространение в современных компьютерах ввиду легкости перевода в десятичную систему и обратно. Она используется там, где основное внимание уделяется не простоте технического построения машины, а удобству работы пользователя. В этой системе счисления все десятичные цифры отдельно кодируются четырьмя двоичными цифрами и в таком виде записываются последовательно друг за другом.
Двоично-десятичная система неэкономична с точки зрения реализации технического построения машины (примерно на 20 % увеличивается потребное оборудование), но очень удобна при подготовке задач и при программировании.
В двоично-десятичной системе счисления основанием системы счисления является число десять, но каждая из 10 десятичных цифр (0, 1,..., 9) изображается при помощи 4-х двоичных цифр, то есть кодируется двоичными цифрами. Здесь имеется избыточности, поскольку четыре двоичных цифры (или двоичная тетрада) могут изобразить не 10, а 16 чисел. Существует целый ряд двоично-кодированных десятичных систем представления, отличающихся тем, что определенным сочетаниям нулей и единиц внутри одной тетрады поставлены в соответствие те или иные значения десятичных цифр.
Различные хитрые способы кодирования десятичных цифр внутри тетрады применяются для автоматического обнаружения ошибок в расчетах.
В наиболее часто используемой естественной двоично-кодированной десятичной системе счисления веса двоичных разрядов внутри тетрады, то есть 8, 4, 2, 1 (см. табл. 1).
Шестнадцатеричная система счисления
При программировании иногда используется шестнадцатеричная система счисления, перевод чисел из которой в двоичную систему счисления весьма прост — выполняется поразрядно (полностью аналогично переводу из двоично-десятичной системы). Для изображения цифр, больших 9, в шестнадцатеричной системе счисления применяются буквы
● А представляет цифру -> 10,
● В -> 11, ● С -> 12, ● D -> 13, ● Е -> 14, ● F –> 15 (см. табл. 1).
Таблица 1. Таблица двоичных кодов десятичных и шестнадцатеричных цифр
Цифра |
Код |
Цифра |
Код |
Например, шестнадцатеричное число F17B(16) в двоичной системе выглядит так: 1111 0001 0111 1011(2),
а десятичное число 9703(10) в двоично-десятичной системе выглядит так: 1001 0111 0000 0011(2-10). |
0 |
0000 |
8 |
1000 | |
1 |
0001 |
9 |
1001 | |
2 |
0010 |
А |
1010 | |
3 |
0011 |
В |
1011 | |
4 |
0100 |
С |
1100 | |
5 |
0101 |
D |
1101 | |
6 |
0110 |
Е |
1110 | |
7 |
0111 |
F |
1111 |
2.4. Выполнение арифметических операций в компьютере
Правила выполнения арифметических операций
в двоичной системе счисления
Сложение |
101110 + |
Вычитание |
101110 - |
001011 |
001011 | ||
Результат |
111001 |
Результат |
100011 |
Умножение |
101101x101 101101 000000 101101 |
Деление |
101101/101 1 10 101 |
Результат (произведение) |
11100001 |
Результат (частное) |
1001 |
аналогичны правилам операций в десятичной системе счисления.
Особенности выполнения операций над числами с плавающей запятой
Кратко остановимся на выполнении операции над числами с плавающей запятой.
При сложении (вычитании) чисел с одинаковыми порядками их мантиссы складываются (вычитаются), а результату присваивается порядок, общий для исходных чисел.
Если порядки исходных чисел разные, то сначала эти порядки выравниваются (число с меньшим порядком приводится к числу с большим), затем выполняется операция сложения (вычитания) порядков.
Если при выполнении операции сложения
мантисс возникает
При умножении чисел с плавающей запятой их мантиссы перемножаются, а порядки складываются.
При делении числа с плавающей запятой мантисса делимого делится на мантиссу делителя, а для получения порядка частного из порядка делимого вычитается порядок делителя.
Если при этом мантисса делимого больше мантиссы делителя, то мантисса частного окажется больше 1 (происходит переполнение) и ее следует сдвинуть на 1 разряд вправо, одновременно увеличив на единицу порядок частного.
Выполнение арифметических операций над числами в дополнительных кодах
При выполнении арифметических операций в компьютере обычно применяются не простые, а модифицированные коды. Модифицированный код отличается от простого использованием для изображения знака числа двух разрядов.
Второй знаковый разряд служит для
автоматического обнаружения
Сложение производится по обычным правилам сложения двоичных чисел: единица переноса, возникающая из старшего знакового разряда, просто отбрасывается.
Примеры сложения:
X=-0,1101; Y=0,1001. Результат сложения: 11,0011 + 00,1001 = 11,1101 (или -1100);
Х= 0,1101; Y=0,1001. Результат сложения: 00,1101 + 00,1001 = 01,0110 (переполнение, после сдвига вправо получим 00,10110, или +10110);
Х= 0,1101; Y=-0,1001. Результат сложения: 00,1101 + 11,0111 = 100,0100(или 00,0100);
X=-0,1101; Y=-0,1001. Результат сложения: 11,0011 + 11,0111 = 110,1010 (переполнение, после сдвига вправо получим 11,01010, или -10110).
Умножение чисел в дополнительных кодах производится по обычным правилам умножения двоичных чисел. Единственной особенностью является то, что если сомножитель является отрицательным (знаковые разряды равны 11), то перед началом умножения следует приписать к нему слева столько единиц, сколько значащих разрядов у другого сомножителя справа от запятой. Результат (произведение) всегда получаем в дополнительном коде.
Особенности выполнения операций в обратных кодах
Обратные коды следует складывать как обычные двоичные числа, поступая со знаковыми разрядами, как с обычными разрядами, а если возникает единица переноса из знакового разряда, ее следует прибавить к младшему разряду суммы кодов.
Последнее обстоятельство (возможное добавление единицы в младший разряд) увеличивает время выполнения операций в обратных кодах, поэтому в компьютере чаще используются дополнительные коды.
Выполнение арифметических операций в 16-ричной системе счисления
Арифметические операции в шестнадцатеричной системе в машине не выполняются.
Операции сложения и вычитания чисел в таком представлении иногда приходится выполнять при программировании, например при вычислении полных адресов ячеек памяти (при сложении и вычитании адресов сегмента, базы, индекса, смещения в ПК).
Правила их выполнения - обычные для позиционной системы счисления.
3. Особенности представления информации в ПК
- Числовая информация внутри ПК кодируется в двоичной или в двоично-десятичной системах счисления; при вводе и выводе любой информации в ПК используются специальные коды представления информации — коды ASCII (American Standard Code for Information Interchange — американский стандартный код для обмена информацией). Эти же коды применяются для кодирования буквенной и символьной информации внутри ПК.
Для удобства работы введены следующие термины для обозначения совокупностей двоичных разрядов (табл. 2). Эти термины обычно используются в качестве единиц измерения объемов информации, хранимой или обрабатываемой в компьютере.
Таблица 2. Двоичные совокупности
Количество двоичных разрядов в группе |
Наименование единицы измерения |
1 |
Бит |
8 |
Байт |
16 |
Параграф |
8•10241 = 8•210 |
Кбайт (килобайт) |
8•10242 = 8•220 |
Мбайт (мегабайт) |
8•10243 = 8•230 |
Гбайт (гигабайт) |
8•10244 = 8•240 |
Тбайт (терабайт) |
8•10245 = 8•250 |
Пбайт (пентабайт) |
Последовательность нескольких бит или байт часто называют полем данных.
Биты в числе (в слове, в поле и т. п.) нумеруются справа налево, начиная с 0-го разряда. В ПК могут обрабатываться поля постоянной и переменной длины.
Поля постоянной длины: □ слово — 2 байт; □ двойное слово — 4 байт;
Числа с фиксированной запятой чаще всего имеют формат слова и полуслова.
Числа с плавающей запятой - формат двойного и расширенного слова.
Поля переменной длины могут иметь любой размер от 0 до 255 байт, но обязательно равный целому числу байт.
Структурно запись двоичного числа -1100 0001(2), равного десятичному -193(10), в разрядной сетке ПК выглядят следующим образом (рис. 1, 2) – прижимаясь вправо.
Слово = 2 байт = 16 бит
Разряд |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Число |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
Знак числа |
Абсолютная величина числа | |||||||||||||||
Рис. 1. Число с фиксированной запятой формата слово со знаком
Двойное слово = 4 байт = 32 бит
Разряд |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
15 |
… |
1 |
0 |
Число |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
… |
0 |
0 |
Знак числа |
Порядок |
Мантисса | ||||||||||||||||||
Рис.2. Число с плавающей запятой формата двойное слово
Прижимаясь влево
Двоично-кодированные десятичные числа могут быть
представлены в ПК полями переменной длины
в так называемых упакованном (рис. 3) и
распакованном форматах.
В упакованном формате для каждой десятичной цифры отводится по четыре двоичных разряда (полбайта), при этом знак числа кодируется в крайнем правом полубайте числа (1100 — знак «+» и 1101 — знак «-»). Здесь: ЦФ — цифра, Знак — знак числа.
ЦФ |
ЦФ |
ЦФ |
ЦФ |
… |
ЦФ |
Знак |
Рис. 3.Структура поля упакованного формата
В распакованном формате (рис. 4) для каждой десятичной цифры отводится по целому байту, при этом старшие полубайты (зона) каждого байта (кроме самого младшего) в ПК заполняются кодом 0011 (в соответствии с ASCII-кодом), а в младших (левых) полубайтах обычным образом кодируются десятичные цифры. Старший полубайт (зона) самого младшего (правого) байта используется для кодирования знака числа.
Зона(0011) |
Цф |
Зона(0011) |
ЦФ |
… |
Зона(0011) |
Цф |
Знак |
ЦФ |
Рис. 4. Структура поля распакованного формата
Упакованный формат используется обычно в ПК при выполнении операций сложения и вычитания двоично-десятичных чисел.
Распакованный формат используется в ПК при вводе-выводе информации, а также при выполнении операций умножения и деления двоично-десятичных чисел.
Например, число -193(10) = - 0001 1001 0011(2-10) в ПК будет представлено:
□ в упакованном:
|
□ в распакованном формате:
|