Теория:

Умножение и деление
Умножение и деление можно свести к операциям сложения и сложения с дополнительным кодом числа.

Пример \(4\)

Выполни умножение \(A\) и \(B\) в восьмиразрядной сетке.
 
Пусть \(A = 23\), \(B = 5\).
 
1. Получим прямой код чисел \(A\) и \(B\) в восьмиразрядной сетке.
 
2. [KA]ПК000101112; [KB]ПК = 000001012.
 
3. Выполним поразрядное умножение.
 
Скриншот 06-04-2022 232346.jpg
 
4. Проанализируем полученный результат. Переполнения в старшем разряде восьмиразрядной сетки не произошло. Результат верен. Вычисления в десятичной системе счисления его подтверждают. Кроме того, видно, что умножение сводится к сложению и сдвигу содержимого первого сомножителя на один разряд, если во втором сомножителе в разряде \(1\), и к пропуску разряда, если во втором сомножителе \(0\).
 
Ответ: [KA×B]ПК=011100112=7316=11510.
 
Умножение отрицательных чисел выполняется по тем же правилам с учётом того, что отрицательные числа хранятся в дополнительном коде.

Пример \(5\)
 
Выполни умножение \(A\) и \(B\) в восьмиразрядной сетке.
 
Пусть \(A = -19\), \(B = 6\).
 
1. Получим прямой код числа \(B\) в восьмиразрядной сетке:
 
[KB]ПК = 000001102.
 
2. Получим дополнительный код числа \(A\) в восьмиразрядной сетке:

[KA]ПК = 000100112[KA]ОК = 111011002;[KA]ДК = 111011012.
 
3. Выполним поразрядное умножение.

Скриншот 06-04-2022 232738.jpg
 
4. Проанализируем полученный результат. Единица в старшем разряде восьмиразрядной сетки обозначает, что получен дополнительный код отрицательного числа. Это верно. Отнимем от полученного результата единицу и инвертируем его:

100011102 – 1 = 100011012; [KA×B]ПК=011100102=11410.
 
5. Вычисления в десятичной системе счисления подтверждают полученный результат.
 
Ответ: [KA×B]ПК=011100102=11410.
 
Для объяснения операции деления подберём числа так, чтобы результат получался целым числом. А о вещественных числах мы поговорим в другом разделе.
 
Пример \(6\)

Выполни деление \(A\) на \(B\) в восьмиразрядной сетке.
 
Пусть \(A = 45\), \(B = 9\).
 
1. Получим прямой код числа \(A\) в восьмиразрядной сетке:
 
[KA]ПК = 001011012.
 
2. Получим дополнительный код числа \(B\) в восьмиразрядной сетке:

[KB]ПК = 000010012; [KB]ОК = 111101102;[KB]ДК= 111101112.
 
3. Выполним последовательное сложение:
 
Скриншот 06-04-2022 234549.jpg
 
4. Проанализируем полученный результат. Деление свелось к сложению делимого и дополнительного кода делителя. Частное равно количеству операций сложения до достижения нулевого результата. Вычисления в десятичной системе счисления подтверждают полученный результат.
 
Ответ: [KA/B]ПК = 000001012.
 
Практически операция умножения реализуется как алгоритм известного «русского» метода умножения, также основанного на операциях сдвига и определения чётности результата (двоичное число, оканчивающееся на \(1\), — нечётное, оканчивающееся на \(0\) — чётное).

Например, перемножим \(45\) и \(33\):
 
Скриншот 06-04-2022 235800.jpg
 
Результат равен сумме чисел первого столбца, которые умножаются на нечётные числа второго столбца: \(45 + 1440 = 1485\).
Сравнение
Операции сравнения для чисел со знаком и без знака выполняются по-разному. Для примера возьмём три машинных кода чисел \(A\), \(B\), \(C\).
 
Пример \(7\)
  
Пусть [KA] = C834; [KB] = 0045; [KC] = 14A6.
 
Расставь числа, коды которых приведены в задании, в порядке возрастания. Запиши числа друг за другом без пробелов и разделительных знаков.
 
1. Определим знак чисел \(A\), \(B\), \(C\).

[KA] = C834 = 11001000001101002<0 (в знаковом разряде — \(1\));
 
[KB] = 0045 = 00000000010001012>0 (в знаковом разряде — \(0\));
 
[KC] = 14A6 = 00010100101001102>0 (в знаковом разряде — \(0\)).
 
2. Так как \(A\) — число отрицательное, а \(C\) и \(B\) — положительные, сделаем первый вывод, что \(A\) — наименьшее.
 
3. Сравним положительные числа \(C\) и \(B\) — единица в более старшем разряде в числе \(C\) гарантирует, что это число больше.

Следовательно, \(A < B < C\).
 
Ответ: \(ABC\).
 
Пример \(8\)
 
Пусть [KA] = 0123; [KB] = BC00; [KC] = 8765.
 
Расставь числа, коды которых приведены в задании, в порядке возрастания. Запиши числа друг за другом без пробелов и разделительных знаков.
 
1. Определим знак чисел \(A\), \(B\), \(C\).

[KA] = 0123 = 00000001001000112>0 (в знаковом разряде — \(0\));

[KB] = BC00 = 10111100000000002<0 (в знаковом разряде — \(1\));

[KC] = 14A6 = 10000111011001012<0 (в знаковом разряде — \(1\)).
 
2. Так как \(A\) — число положительное, а \(C\) и \(B\) — отрицательные, сделаем первый вывод, что \(A\) — наибольшее.
 
3. Сравним отрицательные числа \(C\) и \(B\). Оба числа хранятся в дополнительном коде. Можно воспользоваться ранее разобранным алгоритмом перехода от дополнительного кода к прямому: отнять \(1\), инвертировать число (см. Примечание). А можно применить другой подход, основанный на том, что дополнительный код — дополнение до переполненной разрядной сетки. То есть для получения модуля этих чисел достаточно вычесть их значение из переполненной разрядной сетки. Для \(16\)-разрядной сетки это число — \(1 0000 0000 0000 0000\), или в шестнадцатеричном коде — \(10000\). Проведём вычитание.
 
Скриншот 08-04-2022 003338.jpg
 
Так как число \(C\) по абсолютной величине больше, то с отрицательным знаком оно будет меньше (сравни: \(5 > 3\), но \(-5 < -3\)).
 
Отсюда \(C < B < A\).
 
Ответ: \(CBA\).

Примечание: [KB] =BC0016=10111100000000002.
 
Скриншот08042022003818.jpg
 
Практически операции сравнения реализуются с помощью вычитания. Равенство — сравнение разности каждого из чисел с машинным нулём. Неравенство — анализ значения самого левого бита разности.
Поразрядные логические операции
Применительно к устройствам компьютера рассматриваемые нами арифметические операции реализуются с помощью основных логических операций: И, ИЛИ, НЕ. Применение этих операций к двоичному представлению кодов чисел называется сбросом и установкой. А константа, с помощью которой применяется логическая операция к многоразрядным числам, называется маской.
 
Так, например, с помощью операции И можно выполнить операцию сброса указанных битов.
 
Скриншот 08-04-2022 004304.jpg
 
В этом примере сброшены все биты, кроме старшего.
 
С помощью операции ИЛИ можно выполнить поразрядное сложение битов числа.
 
Скриншот 08-04-2022 004558.jpg
 
Здесь, кроме примера а), везде выполнена операция установки.
Обрати внимание, что перенос в следующий разряд в случае поразрядного сложения невозможен.

Рассмотрим ещё одну логическую операцию, участвующую в формировании числовых кодов чисел. Операция исключающее ИЛИ, другое обозначение — XOR, а также ещё одно обозначение — .
Таблица истинности этой логической функции.
 
Скриншот 08-04-2022 005108.jpg
 
С помощью этой операции можно выполнить инверсию единичных битов. Часто операцию используют для обнуления переменной или для шифрования данных.

Правильно подобранная маска позволяет сбрасывать и устанавливать, то есть преобразовывать любые биты исходного числа.
 
Пример \(9\)
  
Скриншот 08-04-2022 005410.jpg

Обрати внимание: при единичной маске мы получили обратный код исходного числа. Примени эту маску ещё раз.
 
Скриншот 08-04-2022 005537.jpg
 
Получили исходное число.