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

Информационные преобразования числовых форматов (96

..pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
242.9 Кб
Скачать

Московский государственный технический университет имени Н.Э. Баумана

А.Ф. Деон, С.С. Комалов, Ю.И. Терентьев

ИНФОРМАЦИОННЫЕ ПРЕОБРАЗОВАНИЯ ЧИСЛОВЫХ ФОРМАТОВ

Рекомендовано редсоветом МГТУ им. Н.Э. Баумана

в качестве учебного пособия

Москва Издательство МГТУ им. Н.Э. Баумана

2008

УДК 681.147.2(075.8)

ББК 32.973 Д348

Рецензенты: Н.В. Абакумов, М.В. Виноградова

 

Деон А.Ф., Комалов С.С., Терентьев Ю.И.

Д348

Информационные преобразования числовых форматов:

Учеб. пособие. – М.: Изд-во МГТУ им. Н. Э. Баумана, 2008. – 24 с.: ил.

ISBN 978-5-7038-3148-9

Рассмотрены вопросы представления информации целых и вещественных чисел в оперативной памяти компьютера. Представлены программы преобразования числовой информации с применением инструкций битовой логики на языке программирования С.

Для студентов 1-го курса МГТУ им. Н.Э. Баумана.

УДК 681.147.2(075.8) ББК 32.973

Деон Алексей Федорович Комалов Сергей Сергеевич Терентьев Юрий Иванович

Информационные преобразования числовых форматов

Редактор О.М. Королева

Корректор Р.В. Царева Компьютерная верстка И.А. Марковой

Подписано в печать 28.07.2008. Формат 60 × 84/16. Бумага офсетная. Усл. печ. л. 1,4. Уч.-изд. л. 1,3.

Тираж 100 экз. Изд. № 25. Заказ №

Издательство МГТУ им. Н.Э. Баумана

Типография МГТУ им. Н.Э. Баумана 105005, Москва, 2-я Бауманская ул., 5

ISBN 978-5-7038-3148-9

© МГТУ им. Н.Э. Баумана, 2008

2

ВВЕДЕНИЕ

Битовое представление числовой информации в компьютере отличается от привычного графического изображения чисел, используемых в практической деятельности человека. Одним из способов начертания вещественных чисел является использование точки, разделяющей целую и дробную части числа. Но иногда вещественные числа пишут без дробной части, не применяя разделяющую точку и подразумевая, что в дробной части находится нуль. Для компьютера такие соглашения не всегда удобны, поскольку реально вычислительные действия выполняет процессор, в котором четко определены различные операции с целыми и вещественными числами. Кроме того, компьютеры работают в двоичной системе счисления, осуществляя каждый раз преобразования из арабской десятичной системы в двоичную систему с клавиатуры и обратно перед выводом на монитор. Такие промежуточные действия выполняют специальные программы информационных преобразований чисел. Существует много особенностей, разобраться в которых поможет настоящее пособие.

Числовая информация в некоторых случаях поступает от других электронных устройств, формат представления чисел в которых не всегда совпадает с форматом вычислений в компьютере. Здесь также требуются программы преобразования числовых форматов, чтобы обеспечить совместимость компьютера с внешними устройствами. Например, процессор компьютера не имеет операций для вещественных чисел с фиксированным расположением точки, разделяющей целую и дробную часть числа.

Однако процессор компьютера обладает полным набором инструкций для выполнения битовых операций. Каждый бит числа можно распознать, преобразовать и сдвинуть в область старших или младших бит в каждом байте. Такие операции выполняются набором самых быстродействующих инструкций процессора. Поэтому программы информационных преобразований числовых форматов реализуют в основном с помощью операций битовой логики.

Как правило, почти все языки программирования обеспечивают выполнение битовых операций. В настоящем пособии применяется компилятор языка С++, синтаксис которого не отличается от языка С, если речь идет о программах преобразования числовых форматов.

3

1.ПОЗИЦИОННЫЕ СИСТЕМЫ СЧИСЛЕНИЯ

Впозиционных системах семантика информации зависит от позиций информационных знаков. Если специально не оговорено, то обычно подразумевают горизонтальную систему с расположением знаков слева направо по латинскому образцу. В арабской системе применяется горизонтальное расположение – справа налево. В некоторых восточных странах используются вертикальные позиционные системы.

Левая горизонтальная позиционная система становится системой счисления, или числовой, если число записывается с помощью символов, занимающих определенные позиции. В арифметической позиционной системе счисления из аксиом арифметики следует, что числа образуют упорядоченное множество: каждое следующее число больше предыдущего. Следовательно, арифметические позиционные системы счисления должны обеспечивать такое графическое начертание чисел, чтобы количество позиций, занимаемых символами в изображении следующего числа, было не меньше количества символов в предыдущем числе. Римская система изображения чисел не является арифметической позиционной системой счисления, поскольку первые пять чисел не удовлетворяют этому требованию: I, II, III, IV, V. Число V занимает одну позицию, хотя само число больше, чем числа II, III или IV. Этого противоречия достаточно, чтобы считать римскую систему не арифметически позиционной. Арабская арифметическая система счисления позиционна, и в ней невозможно отыскать подобное противоречие. Количество символов изображения любого целого числа не противоречит аксиомам арифме-

тики: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 и т. д. Числа арифметически позиционны, если: 1) существует начальное число (обычно 0); 2) существуют порождающее число, которое можно сложить с любым числом (обычно 1), и операция сложения; 3) любое следующее число получается из исходного числа после добавления порождающего числа. Числа арифметики строго упорядоченны, и всегда можно указать способ определения следующего и предыдущего числа. Начальное число задается аксиомой. Говоря о системе счисления, предполагают по умолчанию, что в ней выполняются свойства арифметической левой горизонтальной позиционной системы счисления.

Количество s различных знаков или цифр, используемых в системе счисления для обозначения чисел, называют основанием системы {0, 1, 2, … , s – 1}. В двоичной системе основание s = 2,

4

цифры – 0 и 1. В восьмеричной системе основание s = 8 , цифры: 0, 1, 2, 3, 4, 5, 6, 7. В арабской десятичной системе основание s =10, цифры: 0, 1, 2, … , 9. В шестнадцатеричной системе счис-

ления основание s = 16 , цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. В общем случае любое число X в системе счисления можно представить как полином суммы цифр xi {0,1,, s 1} , нахо-

дящихся в соответствующей позиции числа si :

n

 

X = xi si = xn sn + xn1sn1 ++ x1s1 + x0 s0 + x1s1 ++ xm sm .

(1)

i=−m

Например, число 497.108 в десятичной системе счисления можно представить как полином:

497.108 = 4 102 + 9 101 + 7 100 + 1 10−1 + 0 10−2 + 8 10−3 .

Позиционный способ записи числа задает последовательность соответствующих цифр, опуская числовые множителиsi :

X = xn xn−1 ... x1x0 x−1x−2 ... xm .

(2)

Обозначение (2) применяется для ввода чисел с внешних устройств в компьютер. Обозначение (1) используется для программ преобразования чисел из позиционной формы (2) во внутренний формат компьютера.

2.ПРЕОБРАЗОВАНИЯ ЦЕЛЫХ ЧИСЕЛ

ВДВОИЧНОЙ И ДЕСЯТИЧНОЙ СИСТЕМАХ СЧИСЛЕНИЯ

Любое целое число можно представить в виде полинома позиционных чисел (1). Например, для однопозиционных чисел это

очевидно: 510 = 510 10100 , для двухпозиционного числа это может выглядеть так: 3510 = 310 10110 + 510 10100 . Аналогичные варианты представления можно привести для двоичных чисел:

11012 = 12 1032 + 12 1022 + 02 1012 + 1 1002 .

(3)

Учитывая, что 02 = 010, 12 = 110 и 102 = 210, заменим двоичные числа в представлении (3) на десятичные числа:

5

11012 = 110 2103 + 110 2102 + 010 2101

+ 110 2100

=

 

= 110 810 + 110 410 + 010 210 + 110 = 810

+ 410 + 110

= 1310 .

(4)

Равенство 11012 = 1310 можно непосредственно проверить, если 13 раз складывать число 1 в двоичной системе счисления. Таким образом, алгоритм перевода целых чисел из двоичной системы счисления в десятичную систему реализуют следующим образом:

1)представляют двоичное число в позиционном формате полинома;

2)заменяют двоичные позиционные числа десятичными чис-

лами;

3)выполняют арифметические действия сложения с десятичными числами.

Позиционное представление чисел в примерах (3), (4) можно использовать для перевода чисел из десятичной системы счисления в двоичную систему, например:

2510 = 210 10101 + 510 10100 = 102 101012 + 1012 101002

=

= 101002 + 1012 = 110012 .

(5)

Непосредственная проверка примера (5) по аналогии с примером (4) подтверждает корректность преобразования 110012 = = 16 + 8 + 1 = 25. Так работают вычислительные алгоритмы компьютеров.

При ручном преобразовании используют операцию последовательного деления исходного числа и промежуточных результатов на число 2. Затем результат записывают в обратном порядке, например:

25

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24

 

 

12

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

12

 

 

 

6

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

6

 

 

 

3

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

2

 

 

 

1

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

В результате получают 2510 =11012 .

6

3. КОДЫ ДВОИЧНЫХ ЦЕЛЫХ ЧИСЕЛ

Согласно аксиомам арифметики, любой элемент может быть числом, если он не нарушает упорядоченность чисел. Несколько изменим аксиоматику арифметики, т. е. допустим, что перед начальным числом 0 возможен элемент, к которому можно прибавить порождающее число 1, получая 0. Рассуждая аналогичным образом, предположим, что перед таким числом также должно находиться еще одно число и т. д. Нетрудно видеть, что положительные целые числа и новые числа располагаются симметрично относительно 0, если в качестве симметрии взять количество порождающих единиц до или после начального числа 0. Но число 0 не образовано с помощью порождающей единицы и, следовательно, не содержит единиц. Тогда среди новых чисел есть такие, которые противоположны или отрицательны относительно заданного целого положительного числа. В десятичной системе такие числа пишут со знаком минус, например –5.

Применяют три варианта представления отрицательного числа. Это знаковый прямой код целого числа, обратный код целого числа и дополнительный код целого числа.

1. Знаковый прямой код целого числа.

Представим, что целое число занимает 1 байт и состоит из 8 бит. В компьютерной технологии практикуется подход, когда один бит, как правило, старший, используется для представления знака числа: 0 – положительное целое число, 1 – отрицательное число (рис. 1). Тогда оставшиеся 7 бит хранят значение числа. В этом случае диапазон чисел составляет –127…+127. Следует отметить, что существует как –0, так и +0. Это не приводит к недоразумениям, поскольку число 0 со знаком все равно остается числом 0.

7

6

5

4

3

2

1

0

0

1

1

0

0

1

0

1

Знак числа «+»

а

7

6

5

4

3

2

1

0

1

1

1

0

0

1

0

1

Знак числа «–»

б

Рис. 1. Прямой код положительного (a) и отрицательного (б) чисел

7

Если 8 бит рассматривать как код целого числа независимо от знака, то числа [00000000; 01111111]2 [0 ; 127]10 составляют диапазон положительных чисел, а числа [11111111 ; 10000000]2[–127 ; –0]10 – диапазон отрицательных чисел. В этом смысле в диапазоне [0; 11111111]2 не соблюдается единая аксиоматика арифметики для отрицательных и положительных чисел. Для таких чисел процессор компьютера должен иметь специальные инструкции для корректного выполнения действий арифметики.

2.Обратный код целого числа.

Вдополненной аксиоматике арифметики отрицательные числа симметричны положительным числам относительно начального числа 0. Из этого следует, что сумма положительного и отрицательного чисел равна 0, например 1 + (–1) = 5 + (–5) = 0,

ит. п. В двоичном представлении числа 510 должно наблюдаться то же самое:

000001012

+

(6)

 

х2

 

000000002.

Переменная x2 обозначает отрицательное число. Если присмотреться к расположению нулей и единиц в примере (6), то значение x2 можно представить так, чтобы в ответе получались только единицы. Такое представление называется обратным кодом. Для этого необходимо 0 заменить на 1, а 1 заменить на 0:

000001012

(7)

+ 11111010

2

 

 

 

111111112.

 

В примере (7) отрицательное число –510 представлено двоичным числом в обратном коде 111110102.

3. Дополнительный код целого числа.

Дополнительный код целого числа следует идее обратного кода. Положительные числа остаются без изменения. Отрицательные числа формируют по следующему алгоритму:

1)получают отрицательное число из положительного числа заменой 0 на 1 и 1 на 0;

2)прибавляют 1 к обратному коду.

8

4. БИТОВОЕ ОТОБРАЖЕНИЕ ЦЕЛОГО ЧИСЛА

Рассмотрим пример программы C1, в которой два целых числа ( m = 6 и d = −6 ) выводятся на монитор в двоичном виде. Дополнительный код числа m вычисляется как k = m +1. Можно непосредственно убедиться, что число d = −m хранится в компьютере в дополнительном коде (d = k). Кроме того, подтвердим, что −d = d +1 = m = 6 и что m + k = 0 . Поскольку дво-

ичные отображения на мониторе выполняются несколько раз в различных ситуациях, то необходимые инструкции собраны в одну функцию BinaryInt().

Программа С1:

//Program C1

//Битовое изображение целого числа

//Дополнительный код числа

#include <stdio.h>

 

// printf

#include <conio.h>

 

// getch

void BinaryInt( char* text, int n )

// название числа

{ printf( "\n%s", text );

unsigned int b = 0x80000000;

// 1 в бите 31

while( b > 0 )

// заголовок инструкции цикла

{ ( n & b ) == 0 ? printf( "0" ) : printf( "1" );

b >>= 1;

// сдвиг вправо на 1 бит

}

 

 

}

//---------------------------------------------------

void main( void )

{int m = 6, d = -6;

printf( "m = %d",

m );

// монитор

BinaryInt( "m

= ", m );//

битовое изображение m

int k = ~m + 1;

 

 

// дополнительный код

BinaryInt( "~m+1= ", k );//

битовое изображение k

printf( "\nd = %d", d );

// монитор

BinaryInt( "d

= ", d );//

битовое изображение d

BinaryInt( "~d+1= ", ~d+1 );// дополнительный код

BinaryInt( "m+k = ", m + k );

// m + k

getch();

//

просмотр результата

}

9

После выполнения программы C1 следующие строки находятся на мониторе:

m = 6

m = 00000000000000000000000000000110

m + 1= 11111111111111111111111111111010 d = –6

d = 11111111111111111111111111111010

d + 1= 00000000000000000000000000000110 m + k = 00000000000000000000000000000000

5.ПРЕОБРАЗОВАНИЯ ВЕЩЕСТВЕННЫХ ЧИСЕЛ

ВДВОИЧНОЙ И ДЕСЯТИЧНОЙ СИСТЕМАХ СЧИСЛЕНИЯ

Позиционная форма (2) вещественного числа содержит точку, разделяющую целую и дробную части числа. Целая часть переводится из одной системы счисления в другу по алгоритмам

(3)–(5). Для образования дробной части используются позиционные порождающие единицы: .1, .01, .001 и т. д. Чтобы выяснить соответствия в двоичной и десятичной системах, представим двоичное дробное число в виде суммы позиционных единиц с последующей подстановкой десятичных чисел на место двоичных чисел. Например,

110.12 = 12 1022 + 12 1012 + 02 1002 + 12 102−1 =

= 110 2102 + 110 2110 + 010 2100 + 110 210−1 =

= 410

+ 210

+ 010

+

1

= 6

1

= 6.5 .

(8)

2

2

 

 

 

 

 

 

 

Перевод дробного двоичного числа в десятичное число может быть осуществлен по такому алгоритму:

1)перевод целой части;

2)перевод дробной части;

3)сложение переведенных целой и дробной частей. Пример:

0.65210 110 0.510 010 0.2510 110 0.12510

1

1

0

1

1

1

1

2

1

0

2

2

1

2

3

21

22

23

 

 

 

10

10

10

10

10

10

10

10

10

 

10

 

10

 

10

 

 

 

 

 

 

 

 

 

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]