- •Самарский государственный технический университет
- •Представление чисел с плавающей точкой
- •Прямой, обратный, дополнительный коды
- •Представление символьной информации
- •Преобразование информации на машинном уровне
- •Сложение целых чисел
- •Вычитание целых чисел
- •Сложение и вычитание действительных чисел
- •Умножение и деление чисел
- •Обработка символьной информации
- •Работа с программой "Формы представления данных и преобразование информации в эвм"
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Библиографический список
Преобразование информации на машинном уровне
Внутреннее преобразование информации в ЭВМ сводится к арифметическим операциям над двоичными числами и логическим операциям (операциям сравнения) над кодами символьных данных. Эти преобразования имеют свои особенности, которые определяются как алгоритмами операций, так и формами представления данных.
В основе арифметических действий над двоичными числами лежат таблицы сложения (табл.2) и умножения (табл.3).
Таблица 2 Таблица 3
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 =10
0 × 0 = 0
0 × 1 = 0
1 × 0 = 0
1 × 1 = 1
Сложение целых чисел
При выполнении операции сложения положительные слагаемые представляются в прямом, а отрицательные – в дополнительном коде. Сложение кодов производится поразрядно, с учетом переносов, включая биты знака. При возникновении переноса из знакового разряда единица переноса отбрасывается.
В результате получается алгебраическая сумма в прямом коде, если эта сумма положительна (Зн = 0), и в дополнительном коде, если она отрицательна (Зн = 1).
Для оценки переполнения разрядной сетки используется следующее правило: признаком переполнения является наличие переноса в знаковый разряд суммы при отсутствии переноса из знакового разряда суммы и наличие переноса из знакового разряда суммы при отсутствии переноса в ее знаковый разряд.
Например, при сложении чисел +375 и -756 получится:
0
+
11111101 00001100
11111110 10000011
Вычитание целых чисел
Выполнение операции вычитания сводится к операции алгебраического сложения путем применения к вычитаемому процедуры преобразования в дополнительный код. Далее осуществляется выполнение операции сложения согласно вышерассмотренному алгоритму.
Например, при вычитании числа -24678 из числа -756 получится:
1
+
01100000 01100110
01011101 01110010
Сложение и вычитание действительных чисел
Алгоритм сложения (вычитания) чисел в фпт сводится к следующему:
Осуществляется выравнивание порядков чисел. Порядок меньшего по модулю числа принимается равным порядку бόльшего числа, а мантисса меньшего числа сдвигается вправо на число разрядов, равное разности порядков чисел.
Осуществляется сложение мантисс с применением дополнительных кодов, в результате чего получается мантисса суммы (разности). Если алгебраическая сумма мантисс получается в дополнительном коде, то осуществляется переход к прямому коду.
Порядок результата принимается равным порядку бόльшего числа.
Полученная сумма нормализуется.
Например, необходимо сложить два числа, представленных в коротком формате фпт:
Десятичное число |
Представление в коротком формате | ||
Зн |
Порядок |
Мантисса | |
-36.48 |
1 |
10000100 |
00100011110101110000101 |
264.857 |
0 |
10000111 |
00001000110110110110010 |
Согласно приведенному алгоритму сначала осуществляется выравнивание порядков и восстановление скрытых разрядов (в сумматоре):
Десятичное число |
Зн |
Порядок |
Мантисса |
Разр. округл. |
-36.48 |
1 |
10000111 |
0.00100100011110101110000 |
101 |
264.857 |
0 |
10000111 |
1.00001000110110110110010 |
|
Далее выполняется сложение мантисс в дополнительном коде:
Зн |
Мантисса |
Разр. округл. | |
1 |
1.11011011100001010001111 |
011 | |
0 |
1.00001000110110110110010 |
| |
0 |
0.11100100011000001000001 |
011 |
Затем сумма нормализуется:
Зн |
Порядок |
Мантисса |
Разр. округл. |
0 |
10000110 |
1.11001000110000010000010 |
11 |
Далее осуществляется округление мантиссы по следующему правилу: если старший бит разрядов округления равен 1, то к младшему разряду мантиссы прибавляется единица, если – 0, то мантисса остается без изменения. В итоге результат запишется в память в следующем виде:
0 |
10000110 |
11001000110000010000011 |