- •Введение
- •1. Предмет информатики
- •1.1 Роль информации в современном обществе
- •1.2 Информационные барьеры в истории человечества
- •1.3 Предметная область информатики
- •2. Теория информации
- •2.1 Исходные понятия теории информации
- •2.2 Формы представления информации
- •2.3 Преобразование сообщений
- •3. Понятие информации в теории Шеннона
- •3.1 Понятие энтропии
- •3.2 Условная энтропия
- •3.3 Статистическое определение информации
- •3.4 Энтропия и информация
- •3.5 Информация и алфавит
- •4. Кодирование символьной информации
- •4.1 Постановка задачи кодирования. Первая теорема Шеннона
- •4.2 Алфавитное неравномерное двоичное кодирование сигналами равной длительности
- •4.2.1 Неравномерный код с разделителем
- •4.2.2 Префиксное неравномерное кодирование
- •4.3 Равномерное алфавитное двоичное кодирование. Байтовый код
- •4.4 Алфавитное кодирование с неравной длительностью элементарных сигналов. Код Морзе
- •4.5 Блочное двоичное кодирование
- •5. Кодирование и представление чисел в компьютере
- •5.1 Системы счисления
- •5.2 Перевод чисел из одной системы счисления в другую
- •5.3 Перевод чисел между системами счисления с основанием 2k
- •5.4 Формы представления вещественных чисел
- •5.5 Кодирование целых чисел в компьютере
- •5.5.1 Кодирование в компьютере целых чисел без знака
- •5.5.2 Кодирование в компьютере целых чисел со знаком
- •5.6 Кодирование в компьютере вещественных чисел
- •5.7 Двоично-десятичные коды
- •5.7.1 Код (8421) – код прямого замещения
- •6. Обработка чисел в компьютере
- •6.1 Выполнение операций сложения
- •6.2 Сложение нормализованных чисел
- •6.3 Выполнение операции умножения
- •6.3.1 Общий алгоритм умножения
- •6.3.2 Особенности умножения в форме с плавающей запятой
- •6.4 Деление чисел
- •7. Кодирование графической и звуковой информации
- •7.1 Представление изображений
- •7.2 Представление звука
- •Список литературы
- •Родина Наталья Васильевна Информатика
- •Часть 1
- •107846, Москва, ул.Стромынка, 20
6.3 Выполнение операции умножения
6.3.1 Общий алгоритм умножения
В компьютере операция умножения сводится к операциям сложения и сдвига. Алгоритм умножения для любой позиционной системы счисления приведен на рисунке 6.1.
В зависимости от того, с какого разряда начинается умножение, сдвиг сумматора будет вправо или влево:
- если с младшей цифры – то сумматор сдвигается вправо;
- если со старшей цифры – то сумматор сдвигается влево.
Для простоты блок (**) будем представлять как некоторое устройство, с помощью которого происходит однотактное получение произведения множимого на очередную цифру множителя – частичное произведение.
Пример 5. Найти произведение чисел.
а) 321(10) * 23(10)
с о старшей цифры множимого с младшей цифры
321 321
23 23
642 963
963 642
7383 7383
Ответ: 321(10) * 23(10) = 7383(10).
б) 110110(2)*1011(2)
1 10110 110110
1011 1011
110110 110110
000000 110110
110110 000000
110110 110110 .
1001010010 1001010010
Ответ: 110110(2)*1011(2) = 1001010010(2) .
Умножение с младших разрядов более предпочтительно, так как при сдвиге сразу формируется очередной младший разряд произведения.
6.3.2 Особенности умножения в форме с плавающей запятой
Напомним, что число в форме с плавающей запятой представляется в виде X(р) = m(р) 10kр,
где m – мантисса, k – порядок, р – основание системы счисления.
При выполнении операций умножения необходимо работать как с мантиссами, так и с порядками чисел. Результат должен быть нормализован.
Последовательность шагов при умножении чисел (X= mx pkx,Y= my pky)
в форме с плавающей запятой:
1. определяется мантисса произведения m* = mx my с условием нормализации. Нарушение нормализации может быть только вправо (0 после точки) и только на 1 разряд;
2. определяется порядок произведения k* =(kx + ky) с учетом нормализации мантиссы;
3. знак произведения определяется на основе знаков сомножителей следующим образом:
0 + 0 = 0,
0 + 1 = 1,
1 + 0 = 1,
1 + 1 = 0,
то есть знак произведения равен двоичной сумме знаков сомножителей – Знак * = знак x знак y.
Получающийся после умножения код имеет 2n разрядов. Его приходится округлять до n разрядов (ограничение разрядной сетки). Для правильного округления в сумматоре надо иметь, по крайней мере, (n+2) разряда. Все сдвиги, выходящие за эти разряды можно терять, экономя время на сложении частичных произведений.
Однако в «больших» компьютерах используются схемы, позволяющие получить все 2n разрядов. Делается это в целях повышения точности, так как округление при умножении дает быстрое накопление погрешности.
6.4 Деление чисел
Деление – наиболее трудоемкая операция и встречает при своей реализации наибольшие трудности.
Общая схема деления состоит из однотипных шагов (рисунок 6.2).
Для получения очередной k-ой цифры частного необходимо:
1) из остатка, полученного после определения (k-1) цифры (для 1-го шага таким остатком является делимое), последовательно вычитают делитель до получения после вычитания первого отрицательного числа. Очередная цифра частного равна этому числу вычитаний;
2) к полученному отрицательному результату добавляется делитель (восстановление остатка). Полученное число образует остаток для следующего шага;
3) сдвигают либо делитель на 1 разряд вправо, либо остаток на 1 разряд влево и переходят к п.1.
Вычитание делителя сводится к операции сложения в дополнительном коде, как было показано выше. Операции со знаком выполняются по правилам двоичной арифметики.
Число вычитаний в каждом цикле не более р – основание системы счисления. Число циклов – не более n+3. 3 дополнительных разряда – один, соответствует первой цифре частного, нужен для определения переполнения, два других – последние разряды частного для правильного округления результата до n разрядов.
Пример 6. Разделить 59(10)/27(10) .
Дополнительный код делителя ДК(27(10)) = 1.73(10)
|
знак |
разряд 1 |
разряд 2 |
частное |
|
|
|
,, |
0 |
5 |
9 |
2 |
1 |
|
|
всего было 2 вычитания, в частное записываем 2. |
1 |
7 |
3 |
|
|
|
|
0 |
3 |
2 |
результат >0, продолжаем вычитание |
||||
1 |
7 |
3 |
|
|
|
|
|
0 |
0 |
5 |
результат >0, продолжаем вычитание |
||||
|
1 |
7 |
3 |
|
|
|
|
|
1 |
7 |
8 |
результат <0, формируем цифру частного |
|||
|
0 |
2 |
7 |
восстановление остатка |
|||
|
0 |
0 |
5 |
|
|
|
|
всего было 1 вычитание, в частное записываем 1 |
1 |
9 |
7 |
сдвигаем делитель, начинаем вычитание |
|||
0 |
0 |
2 |
результат >0, продолжаем вычитание |
||||
1 |
9 |
7 |
|
|
|
|
|
1 |
9 |
9 |
результат <0, формируем цифру частного |
||||
|
0 |
0 |
2 |
восстановление остатка |
|||
|
0 |
0 |
1 |
продолжаем процесс… |
Ответ: 59(10)/27(10) = 2.1.. (10)
Контрольные вопросы.
1. Представить в дополнительном коде и выполнить операции сложения А+В в соответствующих системах счисления:
А = 3629(10) А = 210112(3)
В = 5710(10) В = 211101(3).
2. Представить в ДК и выполнить в формате Shortint операцию А+В.
А = 53 А = 53(10) А = 53(10) А = 53(10)
В = 47 В = 47(10) В = 47(10) В = 47(10).
3. Представить в форме ПЗ и выполнить операции А+В, А-В для чисел:
А = 113,5(10), В = 9964 (10) (4 разряда под мантиссу);
А = 11101,101(2), В = 10,1101(2) (8 разрядов под мантиссу).