Слайд 2
Арифметические операции
над положительными числами
Слайд 3
ДВОИЧНАЯ АРИФМЕТИКА
1+1 = 2 ?
1+1 = 10 !!!
Слайд 4
Пример: Выполнить сложение двоичных чисел
X=1101, Y=101
Слайд 5
Пример: Выполнить сложение двоичных чисел
X=1101, Y=101, Z=111
Слайд 6
Пример: Выполнить вычитание из двоичного числа X=10010 числа
Слайд 7
Пример: Выполнить умножение двоичных чисел
X=1001, Y=101
Слайд 8
Пример: Выполнить деление двоичного
числа X=1100.011 на
число Y=10.01
Слайд 9
Арифметические операции
в Р-ичных системах счисления
Во всех
позиционных с/с арифметические операции выполняются по одним и тем
же правилам согласно соответствующим таблицам сложения и умножения.
Для всех систем счисления справедливы одни и те же законы арифметики:
коммутативный,
ассоциативный,
дистрибутивный,
а также правила сложения, вычитания, умножения и деления столбиком.
Слайд 10
Сложение
В Р-ичной системе счисления таблица сложения представляет
собой результаты сложения каждой цифры алфавита Р-ичной системы с
любой другой цифрой этой же системы.
Таблицы сложения двоичной и троичной системы счисления
Слайд 11
Деление
При делении столбиком в Р-ичной системе счисления приходится
в качестве промежуточных вычислений выполнять действия умножения и вычитания,
следовательно, используя таблицы умножения и сложения.
Слайд 12
Арифметика
с алгебраическими числами
Слайд 13
Способы представления целых чисел
Прямой код
Обратный код
Дополнительный код
Слайд 14
Прямой код
Число записывается «как есть», дополняется нулями в
старших разрядах до нужного размера.
00101101 45(10)
Запись целого
числа А будет формироваться по правилу:
Слайд 15
Обратный код
Положительное число записывается «как есть», дополняется нулями
в старших разрядах до нужного размера.
Отрицательное число записывается инвертированием
разрядов модуля числа.
Старший бит определяет знак числа
(1 — отрицательное, 0 — положительное).
Слайд 16
Запись целого числа в обратном коде
где n –
разрядность модульного поля;
q – основание системы счисления;
(2n –
1) – максимальная включенная граница диапазона изменения представляемых чисел.
диапазон изменения чисел А: (qn – 1) ≥ | A | ≥ 0
Слайд 17
Запись правильной дроби в обратном коде
где n –
разрядность поля модуля;
1 – q-n – верхняя включенная
граница
представляемых чисел.
(1 – q–n) ≥ | А | ≥ 0
Слайд 18
Примеры чисел в обратном коде
01100111 103(10)
10011000
–103(10)
00000000 0(10)
11111111 –0(10)
Слайд 19
Дополнительный код
Положительное число записывается «как есть», дополняется нулями
в старших разрядах до нужного размера.
Отрицательное число записывается инвертированием
разрядов модуля числа и прибавлением 1.
Старший бит определяет знак числа
(1 — отрицательное, 0 — положительное).
Слайд 20
Запись целого числа в дополнительном коде:
Запись числа формируется
по следующему правилу:
где n – разрядность модульного поля,
q – основание
с/с,
qn – максимальная невключенная граница диапазона изменения чисел.
(qn) > |A| ≥ 0;
Слайд 21
Запись правильной дроби в дополнительном коде:
где 1 –
максимальная невключенная граница диапазона изменения представляемых чисел.
1 > |A|
≥ 0
Слайд 22
Примеры чисел в дополнительном коде
42 =
00101010(2)
–42 =
00101010
11010101
11010110(2)
Слайд 23
Примеры чисел в дополнительном коде
–1
00000001
11111110
11111111(2)
0 00000000(2)
Слайд 24
Перевод отрицательного числа из обратного (или дополнительного) кода
в прямой выполняется по тем же правилам, что и
перевод числа из прямого кода в обратный (или дополнительный):
для перевода отрицательного числа из обратного в прямой код необходимо дополнить его модуль до включенной границы;
для перевода отрицательного числа из дополнительного кода в прямой код необходимо дополнить его модуль до невключенной границы.
Слайд 25
Правило формирования модуля обратного кода отрицательного двоичного числа
Для
формирования модульной части записи отрицательного числа в обратном коде
достаточно в модульной части записи этого числа в прямом коде взять обратные значения всех двоичных разрядов, т. е. необходимо проинвертировать модуль прямого кода.
Слайд 26
Правило формирования модуля дополнительного кода отрицательного числа
Для формирования
модульной части записи отрицательного числа в дополнительном коде достаточно
в модульной части записи этого числа в прямом коде взять обратные значения всех двоичных разрядов, т. е. необходимо проинвертировать модуль прямого кода и к полученному коду прибавить 1 в младший разряд.
Слайд 27
При выполнении операций над числами со знаком в
ЭВМ используется одно из его представлений (прямой, дополнительный или
обратный код).
Как правило, информация в памяти ЭВМ хранится в прямом коде, а при выполнении операций применяется обратный или дополнительный код.
При использовании дополнительного кода (или обратного) операции вычитания заменяются операциями сложения с изменением знака одного из операндов.
Слайд 28
Операции в дополнительном коде
При сложении чисел, представленных в
дополнительном коде, выполняется сложение разрядов, представляющих запись операндов, по
правилам двоичной арифметики по всей длине записи чисел, не обращая внимания на границу, которая отделает знаковое поле от модульного.
Переполнение знакового поля игнорируется (т.е. выход за левую границу).
В результате такого сложения будет получен дополнительный код суммы операндов.
Слайд 29
Операции в обратном коде
При сложении чисел, представленных в
обратном коде, выполняется сложение разрядов, представляющих запись операндов, по
правилам двоичной арифметики по всей длине записи чисел, не обращая внимания на границу, которая отделает знаковое поле от модульного.
Переполнение знакового поля (т.е. выход за левую границу) учитывается как +1 к младшему разряду полученной суммы.
В результате такого сложения будет получен обратный код суммы операндов.
Слайд 30
Примеры:
Рассчитать значение C = A-B, если А= 10,
В=3.
Слайд 31
Примеры:
6 – 4 = ?
6 - положительное число
с кодом 0110
–4 - отрицательное число с дополнительным кодом
1100
(перенос игнорируется): 6 – 4 = 2
-5 + 2 = ?
2 - положительное число с кодом 0010
–5 - отрицательное число с дополнительным кодом 1011
Число с кодом 1101 является отрицательным, модуль этого числа имеет код 00112 = 310
Слайд 32
Модифицированные коды
При расчете разрядности n модульного поля весьма
трудно бывает учесть диапазон значений результатов, особенно когда последовательность
операций, представленных в подлежащих реализации выражениях, достаточно сложна.
Расчёт, выполненный по всем формальным правилам, может дать «абсурдный» результат, так ,например, результат может отличаться по знаку от операндов при одинаковых знаках обоих операндов.
Слайд 33
Модифицированные коды
Более просто ситуация переполнения определяется при применении
модифицированного кода (обратного или дополнительного).
Модифицированные коды отличаются от
базовых кодов только тем, что поле знака операндов имеет два разряда, и эти разряды имеют одинаковые значения:
00 – для положительных чисел;
11 – для отрицательных чисел.
Слайд 34
Переполнение модифицированного кода
Если в результате сложения чисел в
модифицированном коде полученный результат имеет в поле знака одинаковые
значения в обоих разрядах (00 или 11), то переполнения нет,
если же разряды знакового поля имеют неодинаковые значения (10 или 01),
то имеет мест переполнение.
Слайд 35
Переполнение модифицированного кода
При этом, если в поле знака
имеет место значение 01 – результат положительный (фиксируется положительное
переполнение),
а если 10, то полученный результат – отрицательный (фиксируется отрицательное переполнение).
Основным носителем знака числа является
левый разряд знакового поля.
Слайд 36
Логическая схема выявления переполнения
Слайд 37
Логические операции
с двоичными кодами
Слайд 38
Логическое суммирование
Логическое умножение
Логическое отрицание
Суммирование по модулю 2
Операции сдвига
Слайд 39
Логическое суммирование
Обозначения: ИЛИ, OR, «V»
Выполняется над двумя кодами
заданной разрядности и генерирует код той же разрядности.
Пример:
10001101 V
11110000 = ?
= 11111101(2)
Слайд 40
Логическое умножение
Обозначения: И, AND, «^»
Выполняется над двумя кодами
заданной разрядности и генерирует код той же разрядности.
Пример:
10001101 ^
11110000 = ?
= 10000000(2)
Слайд 41
Суммирование по модулю 2
Обозначения: mod 2, «⊕»
Выполняется над
двумя кодами заданной разрядности и генерирует код той же
разрядности.
Пример:
10001101 ⊕ 11110000 = ?
= 01111101(2)
«Исключающее ИЛИ»
Слайд 42
Логическое отрицание
Обозначения: НЕТ, NOT, «¬», «х»
Выполняется над одним
кодом и генерирует результирующий код той же разрядности.
Пример:
¬(10001101) =
NOT(10001101) = (10001101) = ?
= 01110010(2)
Слайд 44
Логические сдвиги
Сдвиг влево выполняется за счет смещения значений
разрядов от младшего к старшему, в самом младшем устанавливается
0, а «выталкиваемый» разряд пропадает.
Сдвиг вправо выполняется за счет смещения значений разрядов от старшего к младшему, самый старший разряд устанавливается в 0, а «выталкиваемый» разряд пропадает.
Примеры:
Код 11001110 после сдвига влево равен 10011100
Код 11001110 после сдвига вправо равен 01100111
Слайд 45
Логические сдвиги
Циклический сдвиг влево выполняется за счет смещения
значений разрядов от младшего к старшему, в самом младшем
разряде устанавливается значение «выталкиваемого» разряда.
Сдвиг вправо выполняется за счет смещения значений разрядов от старшего к младшему, в самый старший разряд устанавливается «выталкиваемый» младший разряд.
Примеры:
Код 11001110 после цикл. сдвига влево равен 10011101
Код 11001110 после цикл. сдвига вправо равен 01100111
Слайд 47
Арифметический сдвиг
Арифметические сдвиги обеспечивают выполнение умножения (сдвиги влево)
или операции деления (сдвиги вправо) двоичных кодов на два.
Аналогично, сдвиги десятичного числа обеспечивают выполнение деления или умножение на 10.
Слайд 48
Арифметические сдвиги влево и вправо реализуются по-разному в
зависимости как от знака числа, так и
от используемого
кода
(прямого обратного, дополнительного).
Слайд 49
Арифметические сдвиги влево положительных двоичных чисел выполняются
независимо
от используемого кода.
Арифметические сдвиги влево двоичного прямого кода выполняются
в зависимости от того, какое сдвигается число –
положительное или отрицательное.
Слайд 50
Если сдвигается положительное число, то сдвиг (вправо или
влево) выполняется как соответствующий логический сдвиг (влево или вправо),
с той лишь разницей, что при сдвиге влево предусматриваются средства определения факта переполнения.
При любом сдвиге вправо необходимо предусмотреть средства для округления после завершения нужного количества сдвигов и
средства обнаружения обнуления сдвигаемой величины после очередного сдвига.
Слайд 51
Примеры:
Найти результат арифметического сдвига ...
… влево на
три разряда двоичного прямого кода числа
[А]пк = 00.00000101
первый
сдвиг: 00.00000101 ← 00.00001010
второй сдвиг: 00.00001010 ← 00.00010100
третий сдвиг: 00.00010100 ← 00.00101000
… влево на четыре разряда двоичного прямого кода числа
[А]пк = 00.00101
первый сдвиг: 00.00101 ← 00.01010
второй сдвиг: 00.01010 ← 00.10100
третий сдвиг: 00.10100 ← 01.01000
четвертый сдвиг ???
разные значения – это сигнал переполнения !!!
Слайд 52
Примеры:
Найти результат арифметического сдвига ...
… вправо на
два разряда двоичного прямого кода числа [А]пк = 00.00000110
первый
сдвиг: 00. 00000110 → 00. 00000011
второй сдвиг: 00. 00000011 → 00. 00000001 1
Результат выполнения заданного сдвига
будет равен 00.00000010
«вытолкнутый» разряд
Слайд 53
Примеры:
Найти результат арифметического сдвига ...
… вправо на
четыре разряда двоичного прямого кода числа [А]пк = 00.00000110
первый
сдвиг: 00.00000110 → 00.00000011
второй сдвиг: 00.00000011 → 00.00000001
третий сдвиг: 00.00000001 → 00.00000000
Оставшиеся сдвиги могут не выполняться.
сигнал о получении нулевого результата
Слайд 54
Арифметические сдвиги
отрицательных двоичных чисел
Арифметический сдвиг вправо может
выполняться над отрицательными числами с переполнением
(в модифицированном прямом,
обратном или дополнительном коде такие числа имеют в знаковом поле 10).
После сдвига в знаковом поле будет 11.
В старшем разряде устанавливается единица, если число представлено в прямом коде.
В старшем разряде устанавливается ноль, если число представлено в обратном или дополнительном коде.
Слайд 55
Арифметические сдвиги отрицательных двоичных чисел в прямом коде
Арифметический
сдвиг числа,
в прямом коде, осуществляется как соответствующий сдвиг
только модульного поля
записи числа.
Слайд 56
Арифметические сдвиги отрицательных двоичных чисел в обратном коде
Арифметический
сдвиг ВЛЕВО – это
циклический сдвиг исходного кода
с контролем
за переполнением.
Арифметический сдвиг ВПРАВО – это
сдвиг только модульной части записи числа с установкой единицы в освобождающийся разряд
с контролем за обнулением результата сдвига (появление единичных значений во всех разрядах) и округление результата
(ПОСЛЕ выполнения заданного количества сдвигов).
Освобождающийся разряд заполняется единицей.
Слайд 57
Арифметические сдвиги отрицательных двоичных чисел в дополнительном коде
Арифметический
сдвиг ВЛЕВО – это
логический сдвиг влево модуля исходного
кода
с контролем за переполнением.
Освобождающийся разряд заполняется нулем.
Арифметический сдвиг ВПРАВО – это
логический сдвиг вправо модуля исходного числа
с контролем за обнулением результата сдвига (появление единичных значений во всех разрядах).
Освобождающийся разряд заполняется единицей.
Слайд 58
Примеры:
Пример 1.
Выполнить сдвиг вправо на 2 разряда числа
[А]пк = 10.01000110 (А10 = –326).
Первый сдвиг: 10. 01000110
→ 11.10100011 (–16310);
Второй сдвиг: 11.10100011 → 11.01010001 (–8110) и последний вытолкнутый разряд равен 1).
С учетом округления имеем окончательный результат: [А2]пк = 11.01010010.
Пример 2.
Выполнить сдвиг вправо на 2 разряда числа [А]ок = 10.10111001 (А10 = –326).
Первый сдвиг: 10.10111001 → 11.01011100 (–16310);
Второй сдвиг: 11.01011100 → 11.10101110 (–8210).
Пример 3.
Выполнить сдвиг вправо на 2 разряда число [А]дк = 10. 10111010 (А10 = –326).
Первый сдвиг: 10.10111010 → 11.01011101 (–16310);
Второй сдвиг: 11.01011101 → 11.10101110 (–8110) и последний вытолкнутый разряд равен 1).
С учетом округления имеем окончательный результат [А]дк = 11.10101111.