Теоретические основы информатики. Учебное пособие
.pdf
4. Выполнить деление двоичных нормализованных чисел
0,1111∙10100 и 0,101∙1011.
При делении из порядка делимого вычитается порядок делителя, а над мантиссами совершается обычная операция деления. В случае
необходимости полученный результат нормализуется.
0,1111∙10100 : 0,101∙1011= (0,1111 : 0,101) ∙ 10100 – 11 = 1,1 ∙ 101 = = 0,11 ∙ 1010.
Из приведенных примеров очевидно, что все операции с ЧСПЗ выполняются по обычным правилам сложения, вычитания, умножения и деления. В первых двух случаях производится вынесение за скобки общего множителя. В других случаях – сложение (вычитание) степеней при одинаковых основаниях.
Упражнения. Выполнить операции сложения, вычитания, умножения и деления заданных десятичных чисел в нормализованном формате с плавающей запятой с точностью до шестого знака в СС с осно-
ваниями 2, 5, 8, 16.
1 |
54,2; –206,71 |
2 |
–132,75; 41,82 |
3 |
46,83; –15,06 |
4 |
–172,53;121,21 |
|
|
|
|
|
|
|
|
5 |
–105,67; 15,06 |
6 |
61,75; –109,04 |
7 |
–152,84; 72,07 |
8 |
56,25; –106,78 |
|
|
|
|
|
|
|
|
9 |
–73,92; 33,81 |
10 |
–93,75; 101.96 |
11 |
–131,45; 56,11 |
12 |
–79,97; 138,65 |
|
|
|
|
|
|
|
|
6.4. Форматы чисел
Двоично-кодированные десятичные числа могут быть представлены в ЭВМ полями переменной длины в упакованном и распакованном форматах.
В упакованном формате каждой десятичной цифре отводится 4 двоичных разряда (полбайта); знак числа кодируется в крайнем правом полубайте числа. Например, число 1100 обозначает знак «+», а число 1101 – знак «–». Таким образом, структура поля упакованного формата имеет вид, изображенный на рис. 6.3.
Рис. 6.3. Структура поля упакованного формата
Упакованный формат используется обычно в компьютерах при выполнении операций сложения и вычитания двоично-десятичных чисел.
51
В распакованном формате каждой десятичной цифре отводится целый байт. Старшие полубайты (зона) каждого байта, кроме самого младшего, заполняются кодом 0011. В младших полубайтах кодируются десятичные цифры. Старший полубайт самого младшего байта используется для кодирования знака числа. Структура поля распакованного формата имеет вид, изображенный на рис. 6.4.
Рис. 6.4. Структура поля распакованного формата
Распакованный формат используется при вводе-выводе информации, при выполнении операций умножения и деления двоичнодесятичных чисел.
Пример. Записать число –19310 в упакованном и распакованном форматах.
Сначала переведем его в двоично-десятичную СС: –19310 = – 0001 1001 00112–10.
В упакованном формате число имеет вид 0001 1001 0011 1101, а в распакованном формате – 0011 0001 0011 1001 1011 0011.
Распакованный формат является следствием использования в ПК ASCII-кода. Данный код представляет собой кодировочную таблицу печатных символов, набираемых на компьютерной клавиатуре, для передачи информации и некоторых управляющих кодов. Другими словами происходит кодирование алфавита и десятичных цифр в соответствующие символы, представляющие и несущие в себе необходимую информацию. Это один из кодов, использующихся в современных компьютерах. Обмен информацией между компьютерами и их устройствами происходит в виде кодов. Например, при нажатии на клавишу в компьютер посылается не буква или цифра, а её двоичный код в виде последовательности нулей и единиц. Подобно этому в текстовых файлах хранятся не изображения символов, а их коды. При выводе текста на экран монитора или принтер необходимо восстановить изображения всех символов, составляющих данный текст. Внешний вид выводимых на экран символов кодируется и хранится в специальных шрифтовых файлах. В современных текстовых процессорах имеется возможность внедрять шрифты в файл. В этом случае файл содержит не только коды символов, но и описание используемых в этом документе шрифтов. Кроме того, файлы, создаваемые с помощью текстовых процессоров, включают в себя и такие данные о форматировании текста, как его размер, размеры полей, отступов, межстрочных интервалов и другую дополнительную информацию, хранящуюся в виде кодов.
52
7. ПОНЯТИЕ О КОДИРОВАНИИ ИНФОРМАЦИИ
Кодирование информации представляет собой процесс формирования определенного представления информации. В узком смысле – это переход от одной формы представления информации к другой, более удобной для хранения, передачи или обработки. Обратное преобразование называется декодированием. Способ кодирования зависит от цели, для которой оно производится: сокращения записи, засекречивания (шифрования) информации, удобства обработки и т. п. Чаще всего кодированию подвергаются тексты на естественных языках. Полный набор символов, используемых при кодировании, называется алфавитом или азбукой.
Существуют три основных способа кодирования текста:
−числовой – с помощью чисел;
−символьный – символами того же алфавита, что и исходный текст;
−графический – с помощью специальных рисунков или значков. Пример. На рис. 7.1 приведено графическое кодирование, описан-
ное в рассказе Конан Дойля «Пляшущие человечки».
Рис. 7.1. «Пляшущие человечки»
Так как компьютер может обрабатывать информацию, представленную только в числовой форме, то информация других видов должна быть преобразована в числовую. Такие числа называются кодами. Например, текст можно закодировать, если каждую букву заменить кодом, например номером буквы в алфавите. Текстовую информацию можно кодировать с помощью двоичного кода, при этом восьми двоичных разрядов достаточно для кодирования 256 символов. Различными комбинациями восьми битов все строчные и прописные символы английского и русского языков, а также знаки препинания и некоторые другие. В операционных системах семейства Windows используется кодировка Windows-1251, фрагмент которой приведен в табл. 7.1.
53
Таблица 7.1
Фрагмент кодовой страницы Windows-1251
А |
192 |
Р |
208 |
а |
224 |
р |
240 |
Б |
193 |
С |
209 |
б |
225 |
с |
241 |
В |
194 |
Т |
210 |
в |
226 |
т |
242 |
Г |
195 |
У |
211 |
г |
227 |
у |
243 |
Д |
196 |
Ф |
212 |
д |
228 |
ф |
244 |
Е |
197 |
Х |
213 |
е |
229 |
х |
245 |
Ж |
198 |
Ц |
214 |
ж |
230 |
ц |
246 |
З |
199 |
Ч |
215 |
з |
231 |
ч |
247 |
И |
200 |
Ш |
216 |
и |
232 |
ш |
248 |
Й |
201 |
Щ |
217 |
й |
233 |
щ |
249 |
К |
202 |
Ъ |
218 |
к |
234 |
ъ |
250 |
Л |
203 |
Ы |
219 |
л |
235 |
ы |
251 |
М |
204 |
Ь |
220 |
м |
236 |
ь |
252 |
Н |
205 |
Э |
221 |
н |
237 |
э |
253 |
О |
206 |
Ю |
222 |
о |
238 |
ю |
254 |
П |
207 |
Я |
223 |
п |
239 |
я |
255 |
Символьная информация, хранящаяся и обрабатываемая компьютером, сначала кодируется, затем код каждого числа переводится в двоичную систему.
Пример. Закодировать слово ЛЕТО двоичным кодом.
Слово ЛЕТО в данной кодировке имеет вид: 203 197 210206. Переведем полученный код в двоичную систему: 20310 = 110010112, 19710 = = 110001012, 21010 = 110100102, 20610 = 110011102. Результат кодирования имеет вид: 11001011 11000101 11010010 11001110.
7.1. Коды чисел
Более подробно рассмотрим способы кодирования числовой информации.
Выполнение арифметических операций над числами с разными знаками представляется для аппаратной части довольно сложной процедурой. В этом случае нужно определить большее по модулю число, произвести вычитание меньшего из большего, и присвоить разности знак большего по модулю числа. Для упрощения выполнения арифметических операций применяются специальные коды представления чисел. С их помощью упрощается определение знака результата опера-
54
ции. Операция вычитания (или алгебраического сложения) чисел сводится к арифметическому сложению кодов, облегчается выработка признаков переполнения разрядной сетки. В результате упрощаются устройства ЭВМ, выполняющие арифметические операции. Для представления чисел со знаком в ЭВМ применяют прямой, обратный и дополнительный коды.
Общая идея построения кодов состоит в том, что код определяется как число без знака, а диапазон представляемых кодами чисел без знака разбивается на два поддиапазона – положительные и отрицательные числа. Наиболее распространенным и удобным является формирование кодов так, чтобы значение старшего разряда указывало на знак представляемых чисел. Использование такого кодирования позволяет говорить о старшем разряде, как о знаковом (бит знака), а об остальных – как о цифровых разрядах кода. При этом 0 в знаковом разряде означает знак «плюс» для данного числа, а 1 – знак «минус».
7.2. Прямой код
Прямой код (ПК) является обычным двоичным кодом, т. е. двоичном числом, и используется в двух вариантах. В первом (основном) он применяется для записи только неотрицательных чисел. В этом варианте в 8-битном двоичном представлении можно записать числа от 0 до 255, например:
Десятичное число |
Число в ПК |
0 |
0000 0000 |
10 |
0000 1010 |
100 |
0110 0100 |
255 |
1111 1111 |
Второй вариант используется для записи как положительных, так и отрицательных чисел. В этом случае старший бит объявляется знаковым разрядом (знаковым битом). Диапазон десятичных чисел, которые можно записать во втором варианте ПК составляет от –127 до +127, например:
Десятичное число |
Число в ПК |
–127 |
1111 1111 |
–100 |
1110 0100 |
–0 |
1000 0000 |
+0 |
0000 0000 |
+100 |
0110 0100 |
+127 |
0111 1111 |
55
Таким образом, ПК даёт одинаковое представление значимой части числа для положительных и отрицательных чисел и отличается только знаковым битом. В прямом коде число 0 имеет два представления: –0 и +0.
Рассмотрим однобайтовое представление двоичного числа, например 2810. В двоичном формате это 00111002, так как при однобайтовом формате под величину числа отведено 7 разрядов. Положительное и отрицательное двоичное число со знаком будут, соответственно, иметь вид
+2810 = 00011100ПК, –2810 = 10011100ПК.
Сложение в ПК чисел, имеющих одинаковые знаки, выполняется просто: числа складываются, и сумме присваивается знак слагаемых. Сложение в прямом коде чисел с разными знаками является значительно более сложной операцией. В этом случае приходится определять большее по модулю число, производить вычитание модулей и присваивать разности знак большего по модулю числа. Такую операцию значительно проще выполнять, используя обратный и дополнительный коды.
7.3. Обратный код
Обратный код (ОК) для положительных чисел имеет тот же вид, что и прямой код, а для отрицательных чисел образуется из ПК положительного числа путем инвертирования всех значащих разрядов прямого кода. В ОК число 0 также имеет два представления: –0 и +0.
ОК отрицательного двоичного числа формируется дополнением модуля исходного числа нулями до старшего разряда, а затем поразрядным инвертированием цифровых разрядов. Знаковый разряд ОК у положительных чисел содержит 0, а у отрицательных – 1, как и в ПК. Однобайтовые положительное и отрицательное двоичные числа в ОК имеют вид:
+2810 = 00011100ОК, –2810 = 11100011ОК.
ОК позволяет унифицировать операции сложения и вычитания, которые в ПК выполняются по-разному.
Пример. Найти сумму чисел 100 и –25 в обратном коде. Переводим заданные числа в двоичные: 10010 = 11001002, 2510 =
= 110012. В ПК они имеют вид 0110 0100ПК и 0001 1001ПК. Запишем эти числа в ОК:
100 = 0110 0100ОК , –25 = 1110 0110ОК.
56
Сложим эти числа:
0110 0100 + 1110 0110 1 0100 1010
Получено девятиразрядное число, т. е. имеет место переполнение. Отделим старшую единицу, образующую лишний 9-й разряд, и прибавим ее к оставшейся части результата:
0100 1010 + 1 0100 1011.
Знаковый бит нулевой, значит число положительное. Получаем
0100 1011ОК = 0100 1011ПК = 7510.
Пример. Найти сумму чисел 5 и –10 в обратном коде.
Переведем заданные числа в двоичные: 510 = 1012, 1010 = 10102. В прямом коде они имеют вид 0000 0101ПК и 0000 1010ПК. Запишем числа 5 и –10 в обратном коде: 0000 0101ОК и 1111 0101ОК соответственно. Сложим эти числа:
0000 0101
+1111 1010
1111 1010
Знаковый бит равен единице, значит число отрицательное. Перево-
дим число в прямой код: 1111 1010ОК = 1000 0101ПК = –510.
Одним из недостатков работы с ОК является наличие двух нулей: +0 и –0, т. е. в прямом коде (в котором представлены положительные числа) имеет место (+0) = 000…0, а в обратном коде (в котором представлены отрицательные числа): (–0) = 111…1. Эта и другие трудности привели к тому, что в современных ЭВМ абсолютное большинство операций выполняется в ДК.
7.4. Дополнительный код
Дополнительный код (ДК) положительных чисел имеет тот же вид, что и прямой код, а для отрицательных чисел образуется путем прибавления 1 к ОК. Для получения ДК отрицательного числа необходимо инвертировать значение отрицательного числа, записанного в ПК, с сохранением знакового бита, и прибавить единицу к полученной инверсии. В ДК отсутствует число –0.
57
ДК для записи отрицательных чисел позволяет производить операции с десятичными числами в диапазоне от –2k–1 до +2k–1 –1, где k – число используемых двоичных разрядов, включая знаковый. Однако это приводит к асимметрии диапазонов представления чисел относительно нуля. Так, в восьмиразрядном представлении, т. е. с помощью одного байта, можно представить десятичные числа в диапазоне −128 ≤ x ≤ 127, либо только положительные числа в диапазоне 0 ≤ x ≤ 255, где положительные числа – это числа без знака. При этом применение ДК не требует определения модуля и знака числа.
Пример. Дано десятичное число 10,записать число –10 вдвоичномДК. Переведём число 1010 в ПК: 1010 = 0000 1010, тогда
–1010 = 1000 1010.
Инвертируем значение и получаем ОК:
1000 1010ПК = 1111 0101ОК.
К полученной инверсии прибавляем единицу:
1111 0101ОК + 1 = 1111 0110ДК.
Получено десятичное число –10 в ДК.
Второй способ состоит в вычитании числа из нуля. Вычтем
1010 = 0000 1010 из нуля: 0 – 0000 1010 = 1111 0110ДК.
Получено число –10 в ДК.
Для 8-битных чисел приведенные правила сведены в табл. 7.2.
|
|
|
|
Таблица 7.2 |
|
|
|
Перевод чисел в ДК |
|
|
|
|
|
|
|
|
|
Число |
ПК |
ОК (инверсия) |
Инверсия + |
ДК |
|
127 |
0111 1111 |
Положительные значения |
0111 1111 |
|
|
10 |
0000 1010 |
0000 1010 |
|
||
не изменяются |
|
||||
0 |
0000 0000 |
0000 0000 |
|
||
|
|
|
|||
– 0 |
1000 0000 |
1111 1111 |
– |
– |
|
–1 |
1000 0001 |
1111 1110 |
+1 |
1111 1111 |
|
–5 |
1000 0101 |
1111 1010 |
+1 |
1111 1011 |
|
–10 |
1000 1010 |
1111 0101 |
+1 |
1111 0110 |
|
–127 |
1111 1111 |
1000 0000 |
+1 |
1000 0001 |
|
–128 |
– |
– |
– |
1000 0000 |
|
В табл. 7.3 приведены ПК, ОК и ДК 8-битных чисел.
58
Таблица 7.3
ПК, ОК и ДК 8-битных чисел
Число |
ПК |
ОК |
ДК |
8 |
0000 1000 |
0000 1000 |
0000 1000 |
7 |
0000 0111 |
0000 0111 |
0000 0111 |
6 |
0000 0110 |
0000 0110 |
0000 0110 |
5 |
0000 0101 |
0000 0101 |
0000 0101 |
4 |
0000 0100 |
0000 0100 |
0000 0100 |
3 |
0000 0011 |
0000 0011 |
0000 0011 |
2 |
0000 0010 |
0000 0010 |
0000 0010 |
1 |
0000 0001 |
0000 0001 |
0000 0001 |
0 |
0000 0000 |
0000 0000 |
0000 0000 |
–0 |
1000 0000 |
1111 1111 |
– |
–1 |
1000 0001 |
1111 1110 |
1111 1111 |
–2 |
1000 0010 |
1111 1101 |
1111 1110 |
–3 |
1000 0011 |
1111 1100 |
1111 1101 |
–4 |
1000 0100 |
1111 1011 |
1111 1100 |
–5 |
1000 0101 |
1111 1010 |
1111 1011 |
–6 |
1000 0110 |
1111 1001 |
1111 1010 |
–7 |
1000 0111 |
1111 1000 |
1111 1001 |
–8 |
1000 1000 |
1111 0111 |
1111 1000 |
7.5. Сложение в обратном и дополнительном кодах
Сложение и вычитание чисел в обратном и дополнительном кодах выполняется с использованием обычного правила арифметического сложения многоразрядных чисел. Общей для этих кодов особенностью является то, что при поразрядном сложении чисел разряды, изображающие знаки чисел, рассматриваются как равноправные разряды двоичного числа, которые складываются друг с другом и с единицей переноса из предыдущего разряда числа по обычным правилам арифметики. Различия обратного и дополнительного кодов связаны с действиями с единицей переноса из старшего разряда, вызывающей переполнение разрядной сетки. При сложении чисел в ОК эта единица прибавляется к младшему разряду результата, а в ДК единица переноса из старшего разряда игнорируется (отбрасывается).
59
Пример. Сложить числа +12 и –5 в обратном и дополнительном ко-
дах.
а) Переведем данные числа в ОК:
+12 = +11002 = 0000 1100ПК = 0000 1100ОК, –5 = –1012 = 1000 101ПК = 1111 1010ОК.
Выполним сложение в ОК:
|
0000 1100 |
+ 1111 1010 |
|
1|0000 0110 |
|
+ |
1 |
|
0000 0111 |
Получено число 0000 0111ОК. Поскольку знаковый разряд равен 0, то результат положительный, и, следовательно, запись кода числа совпадает с записью прямого кода. Восстановим алгебраическую запись результата. Отбрасывая незначащие нули, получаем +111, или в десятичной форме +7.
б) Запишем числа в ДК:
+12 = 0000 1100ОК = 0000 1100ДК, –5 = 1111 1010ОК = 1111 1011ДК.
Выполним сложение в ДК:
0000 1100 + 1111 1011 1|0000 0111 0000 0111
Получено число 0000 0111ДК. Так как знаковый разряд равен 0, результат положительный. Перейдем к алгебраической записи результата. Он равен +111 (незначащие нули отброшены), или в десятичной форме +7.
Пример. Вычислить –127 – 1 в ДК.
Как видно из табл. 7.2 числа –127 и –1 записываются в ДК соответственно как 1000 0001ДК и 1111 1111ДК. Выполним сложение в дополнительном коде:
1000 0001 + 1111 1111 1 1000 0000
Игнорируя старший разряд, получаем 1000 0000ДК. При попытке перевода этого числа в ОК, а затем в ПК получаем неопределенный ре-
60
