Арифметические операции с целыми числами в конечном числе разрядов.

Сложение беззнаковых чисел

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

Любые цифры, выходящие за пределы определенного числа разрядов, отбрасываются (см. лекцию 3)

Например, если работать в 8-битном беззнаковом представлении, то сумма \(11110000_2 + 00010000_2\) будет иметь значение

1 1 1 1 0 0 0 0
0 0 0 1 0 0 0 0
(1) 0 0 0 0 0 0 0 0

Все, что выходит за рамки 8 разрядов отбрасывается. Поэтому в восьмиразрядном знаковом представлении, \(11110000_2 + 00010000_2 = 0\)

Сложение и вычитание знаковых чисел

Отрицательные числа представляются в виде дополнительного кода (см. лекцию 3)

Дополнительный код строится следующим образом:

  1. Все разряды числа инвертируются
  2. К полученному числу беззнаково прибавляется 1

Дополнительный код дополнительного кода дает прямой код. Исходя из этого, можно так же применить этот алгоритм в обратном порядке:

  1. Беззнаково вычитается 1
  2. Все разряды результата инвертируются

Пример:

Число \(-27\) в 8-разрядном беззнаковом представлении.

Прямой код числа \(27\) – это просто число в двоичной системе счисления: \(11011_2\). Дополняя до 8 разрядов: \(00011011_2\)

Строя дополнительный код, получаем \(11100101_2\).

Пример:

Известно, что используется 8-разрядное знаковое представление, и дан двоичный код числа \(11110000_2\). Что это за число?

Поскольку старший разряд – единица, то это дополнительный код. Построим прямой код: \(00010000_2 = 16_{10}\).

Ответ: \(-16\).

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

Пример:

Вычислим разность \(15-18\). Для этого, преобразуем ее к сумме \(15+(-18)\). В 8-разрядном знаковом двоичном коде, \(15\) представляется как \(00001111_2\), а \(-18\) в виде дополнительного кода. \(18 = 00010010_2\), \(-18\) тогда представляется как \(11101110_2\).

Складываем:

0 0 0 0 1 1 1 1
1 1 1 0 1 1 1 0
1 1 1 1 1 1 0 1

Поскольку старший бит результата равен 1, то это дополнительный код. Соответствующий прямой код \(00000011_2 = 3\), соответственно результат \(-3\).